PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Permissões de usuário do PostgreSQL


No PostgreSQL, tudo é construído em torno do conceito de papel .

Ao instalar o PostgreSQL no macOS pela primeira vez, o script criou uma função com seu nome de usuário do macOS , com uma lista de permissões concedidas.

Não há usuários no PostgreSQL, apenas funções .

Ao executar o psql postgres em seu terminal, você fará login automaticamente com seu nome de usuário do macOS no PostgreSQL, acessando assim a função criada.

No meu caso os flaviocopes função foi criada e posso vê-la usando o \du comando:



Ver? Tenho os seguintes atributos de funções por padrão:
  • Superuser
  • Create role
  • Create DB
  • Replication
  • Bypass RLS

e não sou membro de nenhuma outra função (mais sobre isso depois)

Criando uma nova função


Uma nova função é criada usando o CREATE ROLE comando:
CREATE ROLE <role>;

Por exemplo:
CREATE ROLE testing;



Temos uma nova função, com o Cannot login atributo de função. Nosso usuário recém-criado não poderá fazer login.

Você pode tentar digitando o \q comando e, em seguida, psql postgres -U testing , mas você verá este erro:



Para corrigir esse problema, devemos adicionar o LOGIN atributo role na criação:
CREATE ROLE <role> WITH LOGIN;

Se removermos essa função usando:
DROP ROLE <role>;

e adicione WITH LOGIN desta vez:
DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;

Podemos ver que o testing a função pode fazer login, porque não temos o Cannot login atributo role desta vez:



Tente adicionar o comando \q para sair, e então psql postgres -U testing :



Observe que o prompt alterado de =# para => porque não temos o Superuser atributo role agora.

Adicionar uma senha a uma função


No CREATE ROLE anterior comando criamos uma função sem senha. Claro que é muito importante ter senhas (seguras). Você pode adicionar uma senha usando o PASSWORD palavra-chave:
CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';

CRIAR USUÁRIO


Uma maneira alternativa de definir papéis com o LOGIN atributo adicionado automaticamente (criando efetivamente usuários que podem fazer login) é usar CREATE USER :
CREATE USER <role> PASSWORD '<password>';

Adicionar um atributo de função a uma função


Um atributo de função pode ser adicionado posteriormente a uma função usando o ALTER ROLE comando.

Vamos supor que criamos um papel sem o atributo LOGIN:
CREATE ROLE <username> PASSWORD '<password>';

Podemos adicioná-lo usando:
ALTER ROLE <role> WITH LOGIN;

Atributos de função incorporados


Vimos o LOGIN role já, para permitir que uma função faça login.

Mas quais são outros atributos de função internos que podemos usar?
  • LOGIN / NOLOGIN :permitir (ou não) fazer login no PostgreSQL
  • SUPERUSER / NOSUPERUSER :permitir (ou não) permissões de superusuário. Um superusuário de banco de dados ignorará outras verificações de permissão, exceto LOGIN (deve ser concedido separadamente).
  • CREATEDB / NOCREATEDB :permitir (ou não) a capacidade de criar novos bancos de dados
  • CREATEROLE / NOCREATEROLE :permitir (ou não) a capacidade de criar novas funções
  • CREATEUSER / NOCREATEUSER :permitir (ou não) a capacidade de criar novos usuários
  • INHERIT / NOINHERIT :permitir (ou não) a capacidade de tornar os privilégios herdáveis
  • REPLICATION / NOREPLICATION :conceder (ou não) permissões de replicação (um tópico avançado que não abordaremos)

Funções do grupo


No PostgreSQL, não há grupos de usuários.

Em vez disso, você pode criar funções com determinadas permissões e conceder essas funções a outras funções.

As funções herdarão as permissões das funções concedidas a elas, se essas funções tiverem o atributo INHERIT.

Criar uma função de grupo


Para criar uma função de grupo, digite
CREATE ROLE <groupname>;

A sintaxe é a mesma da criação de uma função.

Depois que a função do grupo for criada, você poderá adicionar funções à função do grupo usando GRANT :
GRANT <groupname> TO <role>

Por exemplo, podemos criar um flavio função de usuário, uma função de grupo “funcionário” e atribua o usuário à função de grupo:
CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;

Você pode remover uma função de uma função de grupo usando:
REVOKE <groupname> FROM <username>

Exemplo:
REVOKE employee FROM flavio;

Atributos da função do grupo


Por padrão, adicionar uma função a uma função de grupo não fazer com que a função herde atributos (permissões) da função do grupo.

Você precisa criar a função de grupo com o INHERIT atributo.

Suponha que você crie a função do grupo de funcionários e atribua a ela o CREATEDB atributo:
CREATE ROLE employee WITH CREATEDB INHERIT;

Agora crie uma nova função usando INHERIT :
CREATE ROLE flavio;
GRANT employee TO flavio;