Voltar ao blog

Como Usar Papéis e Gerenciar Permissões no PostgreSQL

Como Usar Papéis e Gerenciar Permissões no PostgreSQL

PostgreSQL é um SGBD de código aberto que, por sua vez, utiliza SQL. É uma ferramenta muito poderosa que é usada para gerenciar aplicativos e hospedar dados web em VPS. Neste tutorial, você aprenderá como gerenciar permissões no PostgreSQL. Ele ajudará você a fornecer às funções do seu aplicativo as permissões necessárias. Realizaremos este tutorial usando o PostgreSQL em um Ubuntu 18.04 servidor em nuvem na CloudSigma.

Instalando o PostgreSQL

Para baixar e instalar o PostgreSQL, execute os seguintes comandos:

O instalador criará um usuário padrão – “Postgres” para operar. Usaremos este usuário na maior parte deste tutorial. Você pode fazer login no usuário com este comando:

Agora que o PostgreSQL está instalado, você aprenderá como ele lida com permissões. Você também pode acompanhar o nosso tutorial sobre como configurar o PostgreSQL no Ubuntu para obter um guia passo a passo detalhado do processo de instalação.

Conceitos de Permissão do PostgreSQL

O Postgres gerencia as permissões por meio do conceito de “roles.” Com as roles, não há distinção entre usuários e grupos. As roles são mais flexíveis do que o sistema Unix tradicional de usuários e grupos. Por exemplo, uma role pode atuar como membro de outra role, herdando suas permissões.

Visualizando Roles no PostgreSQL

Para visualizar as roles no PostgreSQL, primeiro você precisa fazer login no prompt usando o seguinte comando:

Em seguida, execute o seguinte para visualizar as roles:

show roles manage permissions in PostgreSQL

Até o momento, existe apenas uma role padrão com todos os privilégios.

Como Criar Roles no PostgreSQL

Você pode criar roles para o Postgres a partir da linha de comando ou de dentro do shell do Postgres. Você pode tentar as duas abordagens a seguir, após as quais verá como gerenciar permissões e acessos no PostgreSQL.

Como Criar Roles de Dentro do PostgreSQL

A maneira mais fácil de criar roles é de dentro do prompt do Postgres. Você pode fazer isso com o seguinte comando:

Para verificar se foi criada, execute o comando:

create role from prompt

Ele especifica que a nova role não possui permissões de login. Você aprenderá como alterar isso mais adiante no tutorial.

Como Criar Roles a partir da Linha de Comando

A alternativa ao método acima é criar o usuário a partir da linha de comando. Para sair do prompt do PostgreSQL, digite o seguinte:

Você pode criar uma role chamada “test” com o seguinte comando:

Depois de executar o comando acima, faça login no psql e liste as roles usando os seguintes comandos:

creating user from commandline

Você pode observar que o usuário criado dessa forma não possui os mesmos atributos.

Como Excluir Roles no PostgreSQL

Você pode excluir facilmente roles no PostgreSQL usando a seguinte sintaxe:

Você pode excluir a role de demonstração que criamos anteriormente usando o comando:

drop role

Se tentarmos excluir uma role que não existe, ela simplesmente gerará um erro. Para ver isso, você pode tentar excluir a mesma role novamente:

drop role fail

Se você quiser que o comando não gere um erro quando a role não existir, você pode adicionar ‘IF EXISTS’ no comando:

Você pode tentar excluir a role novamente com este comando:

drop role if exists

Como Definir Privilégios na Criação de Roles

Até agora, você criou e excluiu roles. Nesta seção, você criará roles com permissões alteradas. Você pode fazer isso especificando as permissões para a role com o comando create:

Para ver as opções para isso, você pode abrir a ajuda usando este comando:

help create user

Se você quiser criar uma role com permissões de login, você pode formular o comando assim:

create role with login manage permissions in PostgreSQL

Como vimos anteriormente, se você quiser criar roles com permissão de login, também pode usar o seguinte comando:

A única diferença entre os dois comandos é que ‘CREATE USER’ concede permissão de login à role por padrão.

Como alterar privilégios de roles no PostgreSQL

Até agora, você experimentou como conceder permissões ao criar o usuário. Nesta seção, você alterará as permissões dos usuários já criados. A sintaxe para o comando alter é:

Por exemplo, se quiser, você pode alterar as permissões de login da demo_role para ‘fazer login’ com este comando:

alter nologin

Para permitir que o usuário faça login novamente, você pode alterar as permissões com o seguinte comando:

Como fazer login como um usuário diferente no PostgreSQL

O PostgreSQL permite que você faça login apenas localmente por padrão se o seu nome de usuário corresponder ao nome de usuário do sistema. Para contornar isso, você pode alterar o tipo de login ou configurar o PostgreSQL para usar a interface de rede de loopback. Essa interface alteraria o tipo de conexão para remota, mesmo que a conexão seja local.

Nesta seção, você testará a segunda opção. Para começar, você pode definir a senha do usuário, para que a autenticação seja possível.

Defina a senha do ‘demo_user’ com o seguinte comando:

Quando solicitado, insira e confirme a senha. Depois de concluído, você pode sair da interface do PostgreSQL e retornar ao usuário normal da sua máquina:

O PostgreSQL exige que você faça login com um nome de usuário que corresponda ao nome de usuário do seu sistema operacional e também que se conecte ao banco de dados com o mesmo nome de usuário. Como você não está fazendo isso neste caso, terá que especificar explicitamente as opções que deseja usar. Você pode usar a seguinte sintaxe:

user: O nome de usuário com o qual você deseja se conectar
DB: Um banco de dados existente ao qual você tem acesso
-h 127.0.0.1: Especifica ao PostgreSQL que você se conectará por meio de uma interface de rede à máquina local. Essa opção nos permite a autenticação mesmo que o nome de usuário não corresponda ao nome de usuário do sistema.
-W: Indica ao PostgreSQL que você inserirá uma senha

Para fazer login com o nosso “test_user,” podemos emitir o seguinte comando:

postgresql login through network interface manage permissions in PostgreSQL

Depois de inserir a senha, você estará conectado ao shell. Em nosso exemplo, usamos o banco de dados ‘postgres,’ o banco de dados padrão configurado automaticamente durante a instalação.

Nesta sessão, com base no usuário que você selecionou para fazer login, você enfrentará um problema de não ter as permissões corretas para realizar várias ações. O motivo do problema é que você ainda não concedeu ao usuário permissões suficientes para administrar as coisas.

Na próxima seção, você concederá as permissões necessárias aos usuários. Primeiro, você precisará alterar o usuário de volta para um administrativo:

Gerenciar permissões no PostgreSQL: Como conceder permissões no PostgreSQL

No PostgreSQL, se um banco de dados ou tabela for criado por uma role específica, apenas essa role terá permissões para modificá-lo. A exceção a isso seriam as roles que possuem permissões de superusuário. Nesta seção, você concederá permissões a outras roles. Você pode conceder permissões a outras roles usando a instrução ‘GRANT’. A sintaxe é:

Você pode criar uma tabela simples para executar o comando:

Para ver a tabela criada, execute o comando:

create table manage permissions in PostgreSQL

Agora que você tem uma tabela demo, você pode conceder privilégios na tabela ‘demo’ para a ‘demo_role.’ Você pode dar à role o privilégio ‘UPDATE’ com este comando:

Você pode conceder todas as permissões a uma role especificando a permissão como ‘ALL’:

Se você quiser conceder uma permissão específica para todas as roles no sistema, você pode usar a palavra-chave ‘public’ em vez da role, como no seguinte comando:

Você pode visualizar todas as permissões concedidas usando o seguinte comando:

granted permissions

Gerenciar Permissões no PostgreSQL: Como Remover Permissões no PostgreSQL

Você pode remover facilmente as permissões de uma role usando o comando ‘REVOKE’. É muito semelhante ao comando grant:

Assim como com o GRANT, podemos usar as palavras-chave – ‘ALL’ e ‘PUBLIC’ para conceder todas as permissões ou conceder permissões a todas as roles:

Como Usar Roles de Grupo no PostgreSQL

Para permitir um controle de permissões abrangente, as roles são flexíveis o suficiente para permitir o agrupamento com outras roles. Por exemplo, você pode criar uma role – ‘temporary_role’ e depois adicionar ‘demo_role’ e ‘test_user’ a essa role:

Agora você pode gerenciar as permissões dessas duas roles apenas gerenciando as permissões da role ‘temporary_role’. Isso permite um gerenciamento mais fácil das permissões. Você pode ver as informações de associação de roles com este comando:

role - group manage permissions in PostgreSQL

Qualquer membro do grupo pode agir como o grupo usando o comando ‘set role’. Como o usuário ‘postgres’ é um superusuário, você pode usar ‘set role’ mesmo se não for membro do grupo:

Quaisquer tabelas que você criar agora pertencerão à temporary_role:

Para verificar os proprietários da tabela, execute o seguinte comando:

create table with temporary_role

Você pode ver que a role ‘temporary_role’ é proprietária da nova tabela e da sequência associada ao tipo de dados serial. Para reverter para as permissões originais da role, execute o seguinte comando:

Se você quiser que a role tenha todos os privilégios da role à qual pertence, você pode especificar a propriedade ‘inherit’ com o comando ‘alter role’:

Com o comando acima, o ‘test_user’ obteve todos os privilégios das roles às quais pertence. Para excluir uma role, você pode usar o comando ‘drop role’:

drop role manage permissions in PostgreSQL

O comando acima gera um erro porque temos alguns objetos, como a tabela ‘hello,’ que dependem dele. Para excluí-lo, você pode transferir a propriedade da tabela para uma role diferente:

Você pode verificar que a temporary_role não possui nenhuma tabela agora com o seguinte comando:

check ownerships

Você pode excluir a ‘temporary_role’ agora, pois ela não possui mais nenhuma dependência:

Embora o comando acima exclua a role temporary_users, os antigos membros do grupo de roles não são removidos.

Conclusão

Você concluiu o tutorial e agora sabe como gerenciar permissões no PostgreSQL. Você pode administrar as permissões facilmente. Saber como gerenciar permissões garante que seus aplicativos tenham acesso aos bancos de dados necessários, sem ter acesso a qualquer outro banco de dados usado por um aplicativo diferente.

Boa computação!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev é um designer criativo na CloudSigma, focado na construção de uma identidade empresarial consistente por meio de canais de marketing tradicionais e inovadores. Ele é hábil em combinar a visão artística com o marketing estratégico para criar narrativas de marca impactantes.

Comentários

Nenhum comentário ainda. Seja o primeiro.