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 PostgreSQLSUPERUSER
/NOSUPERUSER
:permitir (ou não) permissões de superusuário. Um superusuário de banco de dados ignorará outras verificações de permissão, excetoLOGIN
(deve ser concedido separadamente).CREATEDB
/NOCREATEDB
:permitir (ou não) a capacidade de criar novos bancos de dadosCREATEROLE
/NOCREATEROLE
:permitir (ou não) a capacidade de criar novas funçõesCREATEUSER
/NOCREATEUSER
:permitir (ou não) a capacidade de criar novos usuáriosINHERIT
/NOINHERIT
:permitir (ou não) a capacidade de tornar os privilégios herdáveisREPLICATION
/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;