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:
|
1 2 |
sudo apt-get update sudo apt-get install postgresql postgresql-contrib |
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:
|
1 |
sudo su - postgres |
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:
|
1 |
psql |
Em seguida, execute o seguinte para visualizar as roles:
|
1 |
\du |

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:
|
1 |
CREATE ROLE demo_role; |
Para verificar se foi criada, execute o comando:
|
1 |
\du |

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:
|
1 |
\q |
Você pode criar uma role chamada “test” com o seguinte comando:
|
1 |
createuser test |
Depois de executar o comando acima, faça login no psql e liste as roles usando os seguintes comandos:
|
1 2 |
psql \du |

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:
|
1 |
DROP ROLE role_name; |
Você pode excluir a role de demonstração que criamos anteriormente usando o comando:
|
1 |
DROP ROLE demo_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:
|
1 |
DROP ROLE demo_role; |

Se você quiser que o comando não gere um erro quando a role não existir, você pode adicionar ‘IF EXISTS’ no comando:
|
1 |
DROP ROLE IF EXISTS role_name; |
Você pode tentar excluir a role novamente com este comando:
|
1 |
DROP ROLE IF EXISTS demo_role; |
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:
|
1 |
CREATE ROLE role_name WITH optional_permissions; |
Para ver as opções para isso, você pode abrir a ajuda usando este comando:
|
1 |
\h CREATE ROLE |

Se você quiser criar uma role com permissões de login, você pode formular o comando assim:
|
1 |
CREATE ROLE demo_role WITH LOGIN; |

Como vimos anteriormente, se você quiser criar roles com permissão de login, também pode usar o seguinte comando:
|
1 |
CREATE USER role_name; |
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 é:
|
1 |
ALTER ROLE role_name WITH attribute_options; |
Por exemplo, se quiser, você pode alterar as permissões de login da demo_role para ‘fazer login’ com este comando:
|
1 |
ALTER ROLE demo_role WITH NOLOGIN; |

Para permitir que o usuário faça login novamente, você pode alterar as permissões com o seguinte comando:
|
1 |
ALTER ROLE demo_role WITH LOGIN; |
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:
|
1 |
\password test |
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:
|
1 2 |
\q exit |
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:
|
1 |
psql -U <span class="highlight">user</span> -d <span class="highlight">db</span> -h 127.0.0.1 -W |
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:
|
1 |
psql -U test -d postgres -h 127.0.0.1 -W |

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:
|
1 2 3 |
\q sudo su - postgres psql |
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 é:
|
1 |
GRANT permission_type ON table_name TO role_name; |
Você pode criar uma tabela simples para executar o comando:
|
1 2 3 4 |
CREATE TABLE demo ( name varchar(25), id serial, start_date date); |
Para ver a tabela criada, execute o comando:
|
1 |
\d |

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:
|
1 |
GRANT UPDATE ON demo TO demo_role; |
Você pode conceder todas as permissões a uma role especificando a permissão como ‘ALL’:
|
1 |
GRANT ALL ON demo TO demo_role; |
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:
|
1 |
GRANT INSERT ON demo TO PUBLIC; |
Você pode visualizar todas as permissões concedidas usando o seguinte comando:
|
1 |
\z |
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:
|
1 |
REVOKE permission_type ON table_name FROM user_name; |
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:
|
1 |
REVOKE INSERT ON demo FROM PUBLIC; |
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:
|
1 2 3 |
CREATE ROLE temporary_role; GRANT temporary_role TO demo_role; GRANT temporary_role TO test_user; |
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:
|
1 |
\du |

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:
|
1 |
SET ROLE temporary_role; |
Quaisquer tabelas que você criar agora pertencerão à temporary_role:
|
1 2 3 4 |
CREATE TABLE hello ( name varchar(25), id serial, start_date date); |
Para verificar os proprietários da tabela, execute o seguinte comando:
|
1 |
\d |

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:
|
1 |
RESET ROLE; |
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’:
|
1 |
ALTER ROLE test_user INHERIT; |
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’:
|
1 |
DROP ROLE temporary_users; |

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:
|
1 |
ALTER TABLE hello OWNER TO demo_role; |
Você pode verificar que a temporary_role não possui nenhuma tabela agora com o seguinte comando:
|
1 |
\d |

Você pode excluir a ‘temporary_role’ agora, pois ela não possui mais nenhuma dependência:
|
1 |
DROP ROLE temporary_users; |
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!


Comentários
Nenhum comentário ainda. Seja o primeiro.