PostgreSQL Privs
Resumo
- Fornece ou revoga privilégios em bancos de dados PostgreSQL.
- Este módulo é basicamente um invólucro em torno da maior parte da funcionalidade das instruções GRANT e REVOKE do PostgreSQL com detecção de mudanças (GRANT/REVOKE privs ON type objs TO/FROM roles).
Parâmetros
Parâmetro | Tipo | Escolhas | Valores padrão | Comentários |
|---|---|---|---|
database | string | | Nome do banco de dados ao qual se conectar.. aliases: db, login_db |
fail_on_role | boolean | Escolhas:
| Caso use 'yes', falha quando o grupo ou target_role não existir. Caso use 'no', apenas avise e continue. |
grant_option | boolean | Escolhas:
| Se o perfil pode conceder/revogar os privilégios/grupos especificados para outros. Defina como 'no' para revogar GRANT OPTION, deixe não especificado para não fazer alterações. grant_option só tem efeito se o state estiver present. aliases: admin_option |
host | string | | Endereço do host do banco de dados. Se não for especificado, conecte via socket Unix. aliases: login_host |
login | string | Default: "postgres" | O nome de usuário usado para autenticação. aliases: login_user |
objs | string | | Lista separada por vírgulas de objetos de banco de dados para definir privilégios. Se o type for table, partition table, sequence, function ou procedure, o valor especial C(ALL_IN_SCHEMA) pode ser fornecido para especificar todos os objetos de banco de dados do tipo type no esquema especificado por meio do schema. (Isso também funciona com PostgreSQL <9.0.) . procedure é suportado desde PostgreSQL 11. Se o type for database, este parâmetro pode ser omitido, nesse caso, os privilégios são definidos para o banco de dados especificado por meio do database. Se o type for function ou procedure, dois pontos (":") em nomes de objeto serão substituídos por vírgulas (necessário para especificar assinaturas, consulte os exemplos). aliases: obj |
password | string | | A senha usada para autenticação. aliases: login_password |
privs | string | | Lista separada por vírgulas de privilégios para conceder/revogar. aliases: priv |
roles | string | | Lista separada por vírgulas de nomes de perfis (usuário/grupo) para os quais definir permissões. O valor especial PUBLIC pode ser fornecido em vez de definir permissões para o grupo PUBLIC definido implicitamente. aliases: role |
schema | string | | Esquema que contém os objetos de banco de dados especificados por meio de objs. Só pode ser fornecido se o type for table, sequence, function, procedure, type ou default_privs. O padrão é public nesses casos. Atenção! Para tipos incorporados quando o esquema type=type pode ser pg_catalog ou information_schema, respectivamente. |
session_role | string | | Alterna para session_role após conectar. O session_role especificado deve ser uma função da qual o login_user atual é membro. A verificação de permissões para comandos SQL é realizada como se o session_role fosse aquele que havia se logado originalmente. |
state | string | Escolhas:
| Se present, os privilégios especificados são concedidos, se absent, eles são revogados. |
target_roles | string | | Uma lista de nomes de perfis existentes (usuário/grupo) para definir como permissões padrão para objetos de banco de dados criados posteriormente por eles. Parâmetro target_roles está disponível apenas com type=default_privs. |
trust_input | boolean | Escolhas:
| Caso use 'no', verifica se os valores dos parâmetros roles, target_roles, session_role, schema são potencialmente perigosos. Faz sentido usar não apenas quando as injeções de SQL por meio dos parâmetros são possíveis. |
type | string | Escolhas:
| Tipo de objeto de banco de dados para definir privilégios. |
unix_socket | string | | Caminho para um socket de domínio Unix para conexões locais. aliases: login_unix_socket |
usage_on_types | boolean | Escolhas:
| Ao adicionar privilégios padrão, o módulo sempre adiciona implicitamente `` USAGE ON TYPES``. Para evitar este comportamento, defina usage_on_types como 'no'. Adicionado para salvar a compatibilidade com versões anteriores. Usado apenas ao adicionar privilégios padrão, caso contrário, ignorado. |
Extende fragmentos da documentação do módulo PostgreSQL Base
Notas
- Os parâmetros que aceitam listas separadas por vírgulas (privs, objs, roles) têm nomes de alias singulares (priv, obj, role).
- Para revogar apenas GRANT OPTION para um objeto específico, defina state como present e grant_option como 'no' (veja os exemplos).
- Observe que ao revogar privilégios de um perfil R, esta função ainda pode ter acesso por meio de privilégios concedidos a qualquer perfil de que R seja membro, incluindo PUBLIC.
- Observe que quando você usa o perfil PUBLIC, o módulo sempre relata que o estado foi alterado.
- Observe que, ao revogar privilégios de um pefil R, você o faz como o usuário especificado por meio de login. Se R também tiver recebido os mesmos privilégios de outro usuário, R ainda poderá acessar os objetos do banco de dados por meio desses privilégios.
- Ao revogar privilégios, RESTRICT é assumido (consulte a documentação do PostgreSQL).
- A autenticação padrão assume que você está fazendo login ou sudo na conta do postgres no host.
- Para evitar o erro “Peer authentication failed for user postgres”, use o usuário postgres como um become_user.
- Se o host remoto for o servidor PostgreSQL (que é o caso padrão), o PostgreSQL também deve ser instalado no host remoto.
- O parâmetro ca_cert requer pelo menos Postgres versão 8.4.
Exemplos
# No banco de dados "library":
# Concede SELECT, INSERT, UPDATE ON TABLE public.books, public.authors
# para librarian, reader com grant_option
- name: Concede privilégios ao librarian e reader no banco de dados library
postgresql_privs:
database: library
state: present
privs: SELECT,INSERT,UPDATE
type: table
objs: books,authors
schema: public
roles: librarian,reader
grant_option: yes
- name: o mesmo acima, aproveitando os valores padrão
postgresql_privs:
db: library
privs: SELECT,INSERT,UPDATE
objs: books,authors
roles: librarian,reader
grant_option: yes
# Revoga GRANT OPTION para INSERT na TABLE books de reader
# Observe que o perfil "reader" terá * concedido * o privilégio INSERT se este
# já não é o caso (state: present).
- name: Revoke privs from reader
postgresql_privs:
db: library
state: present
priv: INSERT
obj: books
role: reader
grant_option: no
# "public" é o esquema padrão. Isso também funciona para PostgreSQL 8.x.
- name: REVOKE INSERT, UPDATE ON ALL TABLES IN SCHEMA public FROM reader
postgresql_privs:
db: library
state: absent
privs: INSERT,UPDATE
objs: ALL_IN_SCHEMA
role: reader
- name: GRANT ALL PRIVILEGES ON SCHEMA public, math TO librarian
postgresql_privs:
db: library
privs: ALL
type: schema
objs: public,math
role: librarian
# Observe a separação de argumentos com dois pontos.
- name: GRANT ALL PRIVILEGES ON FUNCTION math.add(int, int) TO librarian, reader
postgresql_privs:
db: library
privs: ALL
type: function
obj: add(int:int)
schema: math
roles: librarian,reader
# Observe que as associações de perfis de grupo se aplicam a todo o cluster e, portanto, não são
# restrito ao banco de dados "library" aqui.
- name: GRANT librarian, reader TO alice, bob WITH ADMIN OPTION
postgresql_privs:
db: library
type: group
objs: librarian,reader
roles: alice,bob
admin_option: yes
# Observe que aqui "db: postgres" especifica o banco de dados ao qual se conectar, não o
# banco de dados para conceder privilégios (que é especificado por meio do parâmetro "objs")
- name: GRANT ALL PRIVILEGES ON DATABASE library TO librarian
postgresql_privs:
db: postgres
privs: ALL
type: database
obj: library
role: librarian
# Se objs for omitido para o type "databse", o padrão é o banco de dados
# para o qual a conexão é estabelecida
- name: GRANT ALL PRIVILEGES ON DATABASE library TO librarian
postgresql_privs:
db: library
privs: ALL
type: database
role: librarian
# Objs deve ser definido, ALL_DEFAULT para TABLES/SEQUENCES/TYPES/FUNCTIONS
# ALL_DEFAULT funciona apenas com privs=ALL
# Para específicos
- name: ALTER DEFAULT PRIVILEGES ON DATABASE library TO librarian
postgresql_privs:
db: library
objs: ALL_DEFAULT
privs: ALL
type: default_privs
role: librarian
grant_option: yes
# Objs deve ser definido, ALL_DEFAULT para TABLES/SEQUENCES/TYPES/FUNCTIONS
# ALL_DEFAULT funciona apenas com privs=ALL
# Para específicos
- name: ALTER DEFAULT PRIVILEGES ON DATABASE library TO reader, step 1
postgresql_privs:
db: library
objs: TABLES,SEQUENCES
privs: SELECT
type: default_privs
role: reader
- name: ALTER DEFAULT PRIVILEGES ON DATABASE library TO reader, step 2
postgresql_privs:
db: library
objs: TYPES
privs: USAGE
type: default_privs
role: reader
- name: GRANT ALL PRIVILEGES ON FOREIGN DATA WRAPPER fdw TO reader
postgresql_privs:
db: test
objs: fdw
privs: ALL
type: foreign_data_wrapper
role: reader
- name: GRANT ALL PRIVILEGES ON TYPE customtype TO reader
postgresql_privs:
db: test
objs: customtype
privs: ALL
type: type
role: reader
- name: GRANT ALL PRIVILEGES ON FOREIGN SERVER fdw_server TO reader
postgresql_privs:
db: test
objs: fdw_server
privs: ALL
type: foreign_server
role: reader
# Concede permissões de 'execute' em todas os perfis no schema 'common' para a função de 'caller'
- name: GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA common TO caller
postgresql_privs:
type: function
state: present
privs: EXECUTE
roles: caller
objs: ALL_IN_SCHEMA
schema: common
# Conceda permissões de 'execute' em todos os procedimentos no esquema 'common' para o perfil de 'caller'
# Precisa de PostreSQL 11 ou superior
- name: GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA common TO caller
postgresql_privs:
type: prucedure
state: present
privs: EXECUTE
roles: caller
objs: ALL_IN_SCHEMA
schema: common
# ALTER DEFAULT PRIVILEGES FOR ROLE librarian IN SCHEMA library GRANT SELECT ON TABLES TO reader
# Concede SELECT privileges para novos objetos TABLES criados por librarian como
# padrões para o perfil reader.
- name: ALTER privs
postgresql_privs:
db: library
schema: library
objs: TABLES
privs: SELECT
type: default_privs
role: reader
target_roles: librarian
# Altera DEFAULT PRIVILEGES para o perfil librarian no schema library revogando SELECT nos objetos TABLES de reader
# Revoga SELECT privileges para novos objetos TABLES criados por librarian como
# padrões para o perfil reader.
- name: ALTER privs
postgresql_privs:
db: library
state: absent
schema: library
objs: TABLES
privs: SELECT
type: default_privs
role: reader
target_roles: librarian
- name: Grant type privileges for pg_catalog.numeric type to alice
postgresql_privs:
type: type
roles: alice
privs: ALL
objs: numeric
schema: pg_catalog
db: acme
Valores retornados
Chave | Tipo | Retornado quando | Description |
|---|---|---|---|
queries | list | sempre | Lista de consultas executadas. Exemplo: ['REVOKE GRANT OPTION FOR INSERT ON TABLE "books" FROM "reader";'] |