PostgreSQL User
Resumo
- Cria, altera ou remove um usuário (perfil) de uma instância do servidor PostgreSQL (“cluster” na terminologia PostgreSQL) e, opcionalmente, concede ao usuário acesso a um banco de dados ou tabelas existentes.
- Um usuário é um perfil com privilégio de login.
- Você também pode usá-lo para conceder ou revogar os privilégios do usuário em um banco de dados específico.
- Você não pode remover um usuário enquanto ele ainda tiver privilégios concedidos a ele em qualquer banco de dados.
- Defina fail_on_user como no para fazer o módulo ignorar as falhas ao tentar remover um usuário. Neste caso, o módulo reporta se as mudanças aconteceram normalmente e separadamente reporta se o usuário foi removido ou não.
Parâmetros
Parâmetro | Tipo | Escolhas | Valores padrão | Comentários |
|---|---|---|---|
comment | string | | Adiciona um comentário sobre o usuário (equivalente à instrução COMMENT ON ROLE). |
conn_limit | integer | | Especifica o limite de conexão do usuário (perfil). |
db | string | | Nome do banco de dados ao qual se conectar e onde as permissões do usuário são concedidas. aliases: login_db |
encrypted | boolean | Escolhas:
| Se a senha é armazenada em hash no banco de dados. Você pode especificar uma senha sem hash e o PostgreSQL garante que a senha armazenada seja hash quando encrypted=yes for definida. Se você especificar uma senha com hash, o módulo a usará no estado em que se encontra, independentemente da configuração de criptografada. Observação: Postgresql 10 e mais recentes não suportam senhas sem hash. |
expires | string | | A data em que a senha do usuário deve expirar. Se definida como 'infinity', a senha do usuário nunca expira. Observe que esse valor deve ser um tipo de data e hora SQL válido. |
fail_on_user | boolean | Escolhas:
| Se 'yes', falha quando o usuário (perfil) não pode ser removido. Caso contrário, basta registrar e continuar. aliases: fail_on_role |
groups | list | | A lista de grupos (pefis) que você deseja conceder ao usuário. |
name | string | | Nome do usuário (perfil) a ser adicionado ou removido. aliases: user |
no_password_changes | boolean | Escolhas:
| Caso use 'yes', não inspeciona o banco de dados para alterações de senha. Se o usuário já existir, pula todas as verificações relacionadas à senha. Útil quando pg_authid não está acessível (como no AWS RDS). Caso contrário, faz as alterações de senha conforme necessário. |
password | string | | Defina a senha do usuário. A senha pode ser passada sem hash ou hash (MD5-hash). Uma senha sem hash é automaticamente hash quando salva no banco de dados se criptografada for definida, caso contrário, ela é salva em formato de texto simples. Passando uma senha com hash MD5, você deve gerá-la com o formato 'str ["md5"] + md5 [senha + nome de usuário]', resultando em um total de 35 caracteres. Uma maneira fácil de fazer isso é echo "md5`echo -n 'verysecretpasswordJOE' | md5sum | awk '{print $ 1}'` ". Observe que se a string de senha fornecida já estiver no formato MD5 com hash, então ela é usada como -é, independentemente da opção criptografada. |
priv | string | | String de privilégios PostgreSQL separados por barras: priv1/priv2, onde você pode definir os privilégios do usuário para o banco de dados (opções permitidas - 'CREATE', 'CONNECT', 'TEMPORARY', 'TEMP', 'ALL'. Por exemplo CONNECT) ou para a tabela (opções permitidas - 'SELECT', 'INSERT', 'UPDATE', 'DELETE', 'TRUNCATE', 'REFERENCES', 'TRIGGER', 'ALL'. Por exemplo, table:SELECT). Exemplo misto desta string: CONNECT/ CREATE/table1:SELECT/table2:INSERT. |
role_attr_flags | string | Escolhas:
| String de atributos de usuário do PostgreSQL no formato: CREATEDB, CREATEROLE, SUPERUSER. Observe que '[NO]CREATEUSER' está obsoleto. Para criar uma função simples para usá-lo como um grupo, use o sinalizador NOLOGIN. |
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:
| O estado do usuário (perfil). |
trust_input | boolean | Escolhas:
| Se não, verifica se os valores das opções name, password, privs, expires, role_attr_flags, groups, comment, session_role são potencialmente perigosos. Faz sentido usar não apenas quando as injeções de SQL através das opções são possíveis. |
Extende fragmentos da documentação do módulo PostgreSQL Base
Notas
- O módulo cria um usuário (perfil) com privilégio de login por padrão. Use NOLOGIN role_attr_flags para alterar este comportamento.
- Se você especificar PUBLIC como o usuário (perfil), as alterações de privilégio se aplicarão a todos os usuários (perfis). Você não pode especificar a senha ou role_attr_flags quando o usuário PUBLIC for especificado.
- As senhas com hash SCRAM-SHA-256 (autenticação SASL) requerem PostgreSQL versão 10 ou mais recente. Nas versões anteriores, toda a string hash é usada como senha.
- Trabalhando com senhas com hash SCRAM-SHA-256, certifique-se de usar o environment: variable PGOPTIONS: "-c password_encryption=scram-sha-256" (veja o exemplo fornecido).
- Em alguns sistemas (como AWS RDS), pg_authid não está acessível, portanto, o módulo não pode comparar a senha atual e desejada. Neste caso, o módulo assume que as senhas são diferentes e muda informando que o estado foi alterado. Para pular todas as verificações relacionadas à senha para usuários existentes, use no_password_changes=yes.
- 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
- name: Conecte-se ao banco de dados acme, crie um usuário django e conceda acesso ao banco de dados e à tabela de products
postgresql_user:
db: acme
name: django
password: ceec4eif7ya
priv: "CONNECT/products:ALL"
expires: "Jan 31 2020"
- name: Adicione um comentário sobre o usuário django
postgresql_user:
db: acme
name: django
comment: This is a test user
# Conecte ao banco de dados padrão, crie o usuário rails, defina sua senha (MD5-hash),
# e conceder privilégio para criar outros bancos de dados e rebaixar os trilhos do status de superusuário se o usuário existir
- name: Cria usuário do Rails, define a senha com hash MD5, concede privilégios
postgresql_user:
name: rails
password: md59543f1d82624df2b31672ec0f7050460
role_attr_flags: CREATEDB,NOSUPERUSER
- name: Conecte-se ao banco de dados acme e remova os privilégios do usuário de test
postgresql_user:
db: acme
name: test
priv: "ALL/products:ALL"
state: absent
fail_on_user: no
- name: Conecte ao banco de dados de test, remova o usuário de test do cluster
postgresql_user:
db: test
name: test
priv: ALL
state: absent
- name: Conecte-se ao banco de dados acme e defina a senha do usuário sem data de expiração
postgresql_user:
db: acme
name: django
password: mysupersecretword
priv: "CONNECT/products:ALL"
expires: infinity
# Exemplo de formato de string de privilégios
# INSERT,UPDATE/table:SELECT/anothertable:ALL
- name: Conecte-se ao banco de dados test e remova a senha de um usuário existente
postgresql_user:
db: test
user: test
password: ""
- name: cria o usuário test e concede o grupo user_ro e user_rw a ele
postgresql_user:
name: test
groups:
- user_ro
- user_rw
# Crie um usuário com uma senha em texto não criptografado se ela não existir ou atualize sua senha.
# A senha será criptografada com algoritmo SCRAM (disponível desde PostgreSQL 10)
- name: Criar usuário appclient com senha com hash de SCRAM
postgresql_user:
name: appclient
password: "secret123"
environment:
PGOPTIONS: "-c password_encryption=scram-sha-256"
Valores retornados
Chave | Tipo | Retornado quando | Descrição |
|---|---|---|---|
queries | list | always | Lista de consultas executadas. Exemplo: ['CREATE USER "alice"', 'GRANT CONNECT ON DATABASE "acme" TO "alice"'] |