User Tools

Site Tools


wikiv3:users-psql

Usuários

Papéis e usuários

Usuários e grupos no PostgreSQL são igualmente chamados de roles - papéis.

Opções de criação de roles:

postgres-# \h CREATE ROLE
Comando:     CREATE ROLE
Descrição:   define uma nova ROLE do banco de dados
Sintaxe:
CREATE ROLE nome [ [ WITH ] opção [ ... ] ]
 
onde opção pode ser:
 
      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT limite_conexão
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'senha'
    | VALID UNTIL 'tempo_absoluto'
    | IN ROLE nome_role [, ...]
    | IN GROUP nome_role [, ...]
    | ROLE nome_role [, ...]
    | ADMIN nome_role [, ...]
    | USER nome_role [, ...]
    | SYSID uid

Ou

postgres=# \h CREATE USER
Comando:     CREATE USER
Descrição:   define uma nova ROLE do banco de dados
Sintaxe:
CREATE USER nome [ [ WITH ] opção [ ... ] ]
 
onde opção pode ser:
 
      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT limite_conexão
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'senha'
    | VALID UNTIL 'tempo_absoluto'
    | IN ROLE nome_role [, ...]
    | IN GROUP nome_role [, ...]
    | ROLE nome_role [, ...]
    | ADMIN nome_role [, ...]
    | USER nome_role [, ...]
    | SYSID uid

Criando um papel com privilégios de superusuário:

postgres=# CREATE ROLE gean WITH SUPERUSER LOGIN;
CREATE ROLE

Criando uma senha para o papel recém criado:

postgres=# \password gean
Digite nova senha: 
Digite-a novamente: 

OBS: Essa é a opção recomendada para a criação de senha evitando que a senha digitada fique salva no histórico de comandos.

Criando um papel sem privilégios de administrador e informando sua senha:

postgres=# CREATE ROLE bob WITH LOGIN PASSWORD 'senha';
CREATE ROLE

Criando um papel com senha e data de expiração:

postgres=# SELECT now() + INTERVAL '30 day';
           ?COLUMN?           
------------------------------
 2016-07-03 13:29:25.68897-03
(1 registro)
postgres=# CREATE ROLE alice WITH LOGIN PASSWORD 'senha' VALID UNTIL '2016-07-03 13:29:25.68897-03';
CREATE ROLE

Listando os roles criados:

postgres=# SELECT rolname,rolsuper,rolvaliduntil FROM pg_roles;
 rolname  | rolsuper |        rolvaliduntil         
----------+----------+------------------------------
 postgres | t        | 
 gean     | t        | 
 bob      | f        | 
 alice    | f        | 2016-07-03 13:29:25.68897-03
postgres=# \du
                                    Lista de roles
 Nome da ROLE |                         Atributos                         | Membro de 
--------------+-----------------------------------------------------------+-----------
 alice        | Senha valida até 2016-07-03 13:29:25.68897-03             | {}
 bob          |                                                           | {}
 gean         | Super-usuário                                             | {}
 postgres     | Super-usuário, Cria ROLE, Cria BD, Replicação, Bypass RLS | {}

Concessão de privilégios

Os comandos para concessão e revogação de privilégios são, respectivamente, GRANT e REVOKE.

postgres=# \h GRANT 
Comando:     GRANT
Descrição:   define privilégios de acesso
Sintaxe:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] nome_tabela [, ...]
         | ALL TABLES IN SCHEMA nome_esquema [, ...] }
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( nome_coluna [, ...] )
    [, ...] | ALL [ PRIVILEGES ] ( nome_coluna [, ...] ) }
    ON [ TABLE ] nome_tabela [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
GRANT { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { SEQUENCE nome_sequência [, ...]
         | ALL SEQUENCES IN SCHEMA nome_esquema [, ...] }
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    ON DATABASE nome_banco_de_dados [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON DOMAIN nome_domínio [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN DATA WRAPPER nome_fdw [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN SERVER nome_servidor [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION nome_função ( [ [ modo_argumento ] [ nome_argumento ] tipo_argumento [, ...] ] ) [, .
..]
         | ALL FUNCTIONS IN SCHEMA nome_esquema [, ...] }
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON LANGUAGE nome_linguagem [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
GRANT { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECT loid [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMA nome_esquema [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
GRANT { CREATE | ALL [ PRIVILEGES ] }
    ON TABLESPACE nome_tablespace [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON TYPE nome_tipo [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
 
WHERE role_specification can be:
 
    [ GROUP ] nome_role
  | PUBLIC
  | CURRENT_USER
  | SESSION_USER
 
GRANT nome_role [, ...] TO nome_role [, ...] [ WITH ADMIN OPTION ]
postgres=# \h REVOKE 
Comando:     REVOKE
Descrição:   remove privilégios de acesso
Sintaxe:
REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] nome_tabela [, ...]
         | ALL TABLES IN SCHEMA nome_esquema [, ...] }
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | REFERENCES } ( nome_coluna [, ...] )
    [, ...] | ALL [ PRIVILEGES ] ( nome_coluna [, ...] ) }
    ON [ TABLE ] nome_tabela [, ...]
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ GRANT OPTION FOR ]
    { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { SEQUENCE nome_sequência [, ...]
         | ALL SEQUENCES IN SCHEMA nome_esquema [, ...] }
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ GRANT OPTION FOR ]
    { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    ON DATABASE nome_banco_de_dados [, ...]
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON DOMAIN nome_domínio [, ...]
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN DATA WRAPPER nome_fdw [, ...]
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN SERVER nome_servidor [, ...]
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION nome_função ( [ [ modo_argumento ] [ nome_argumento ] tipo_argumento [, ...] ] ) [, .
..]
         | ALL FUNCTIONS IN SCHEMA nome_esquema [, ...] }
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON LANGUAGE nome_linguagem [, ...]
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ GRANT OPTION FOR ]
    { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECT loid [, ...]
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ GRANT OPTION FOR ]
    { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMA nome_esquema [, ...]
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ GRANT OPTION FOR ]
    { CREATE | ALL [ PRIVILEGES ] }
    ON TABLESPACE nome_tablespace [, ...]
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON TYPE nome_tipo [, ...]
    FROM { [ GROUP ] nome_role | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
 
REVOKE [ ADMIN OPTION FOR ]
    nome_role [, ...] FROM nome_role [, ...]
    [ CASCADE | RESTRICT ]

Revogando todos os privilégios do role bob ao banco postgres:

postgres=# REVOKE ALL ON DATABASE postgres FROM bob;
REVOKE
wikiv3/users-psql.txt · Last modified: by 127.0.0.1