community.postgresql.postgresql_user – Создание, изменение или удаление пользователя (роли) на сервере PostgreSQL
Примечание
Этот плагин входит в коллекцию community.postgresql (версия 1.1.1).
Для его установки используйте: ansible-galaxy collection install community.postgresql.
Чтобы использовать его в playbook, укажите: community.postgresql.postgresql_user.
Описание
- Создает, изменяет или удаляет пользователя (роль) на сервере PostgreSQL (в терминологии PostgreSQL — «кластер») и, необязательно, предоставляет пользователю доступ к существующей базе данных или таблицам.
- Пользователь — это роль с привилегией входа.
- Вы также можете использовать его для предоставления или отзыва привилегий пользователя в конкретной базе данных.
- Нельзя удалить пользователя, пока он имеет какие-либо предоставленные привилегии в любой базе данных.
- Установите fail_on_user в
no, чтобы модуль игнорировал ошибки при попытке удалить пользователя. В этом случае модуль сообщает о произошедших изменениях, как обычно, и отдельно сообщает, был ли пользователь удален или нет.
Требования
Ниже перечислены требования, необходимые на хосте, который выполняет этот модуль.
- psycopg2
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| ca_cert строка | Указывает имя файла, содержащего сертификаты центра сертификации SSL. Если файл существует, проверяет, подписан ли сертификат сервера одним из этих центров. Псевдонимы: ssl_rootcert | |
| comment строка добавлен в 0.2.0 community.postgresql | Добавляет комментарий к пользователю (эквивалент инструкции COMMENT ON ROLE). | |
| conn_limit целое число | Указывает лимит подключений пользователя (роли). | |
| db строка | Имя базы данных для подключения и предоставления прав пользователю. Псевдонимы: login_db | |
| encrypted логическое значение |
| Указывает, хранится ли пароль в зашифрованном виде в базе данных. Вы можете указать не зашифрованный пароль, и PostgreSQL гарантирует, что сохраненный пароль будет зашифрован при установке encrypted=да. Если вы укажете зашифрованный пароль, модуль использует его как есть, независимо от значения параметра encrypted. Примечание: Postgresql 10 и более поздние версии не поддерживают незашифрованные пароли. Ранее в Ansible 2.6, это было no по умолчанию. |
| expires строка | Дата истечения срока действия пароля пользователя. Если установлено значение 'infinity', пароль пользователя никогда не истекает.Обратите внимание, что это значение должно быть допустимым типом даты и времени SQL. | |
| fail_on_user логическое значение |
| Если yes, происходит ошибка при невозможности удалить пользователя (роль). В противном случае, просто регистрируется ошибка и выполнение продолжается.Псевдонимы: fail_on_role |
| groups список / элементы=строка | Список групп (ролей), которые нужно предоставить пользователю. | |
| login_host строка | Хост, на котором работает база данных. | |
| login_password строка | Пароль для аутентификации. | |
| login_unix_socket строка | Путь к Unix-сокету для локальных подключений. | |
| login_user строка | Значение по умолчанию: "postgres" | Имя пользователя для аутентификации. |
| name строка / обязательно | Имя пользователя (роли) для добавления или удаления. Псевдонимы: user | |
| no_password_changes логическое значение |
| Если yes, не проверяет базу данных на изменения паролей. Если пользователь уже существует, пропускает все проверки, связанные с паролем. Полезно, когда pg_authid недоступен (например, в AWS RDS). В противном случае, выполняет необходимые изменения пароля. |
| password строка | Устанавливает пароль пользователя; до версии 1.4 это было обязательно. Пароль может быть передан незашифрованным или зашифрованным (MD5-зашифрованным). Незашифрованный пароль автоматически шифруется при сохранении в базе данных, если encrypted установлен, в противном случае он сохраняется в формате открытого текста. При передаче MD5-зашифрованного пароля, он должен быть сгенерирован в формате 'str["md5"] + md5[ password + username ]', в результате чего получится 35 символов. Легкий способ сделать это - echo "md5`echo -n 'verysecretpasswordJOE' | md5sum | awk '{print $1}'`".Обратите внимание, что если переданная строка пароля уже находится в формате MD5-хеша, она используется как есть, независимо от параметра encrypted. | |
| port целое число | Значение по умолчанию: 5432 | Порт базы данных для подключения. Псевдонимы: login_port |
| priv строка | Строка привилегий PostgreSQL, разделенных слешами: priv1/priv2, где вы можете определить права пользователя для базы данных (допустимые варианты - 'CREATE', 'CONNECT', 'TEMPORARY', 'TEMP', 'ALL'. Например CONNECT ) или для таблицы (допустимые варианты - 'SELECT', 'INSERT', 'UPDATE', 'DELETE', 'TRUNCATE', 'REFERENCES', 'TRIGGER', 'ALL'. Например table:SELECT ). Пример смешанной строки: CONNECT/CREATE/table1:SELECT/table2:INSERT. | |
| role_attr_flags строка |
| Строка атрибутов пользователя PostgreSQL в формате: CREATEDB,CREATEROLE,SUPERUSER. Обратите внимание, что '[НЕТ]CREATEUSER' устарел. Для создания простой роли для использования ее как группы, используйте флаг NOLOGIN. |
| session_role строка | Переключиться на роль сессии после подключения. Указанная роль сессии должна быть ролью, членом которой является текущий login_user. Проверка разрешений для команд SQL выполняется так, как будто роль сессии была той, которая первоначально вошла в систему. | |
| ssl_mode строка |
| Определяет, как происходит согласование сессии SSL с сервером. См. https://www.postgresql.org/docs/current/static/libpq-ssl.html для получения дополнительной информации о режимах. Значение по умолчанию prefer соответствует значению по умолчанию libpq. |
| state строка |
| Состояние пользователя (роли). |
| trust_input логическое значение добавлен в 0.2.0 community.postgresql |
| Если no, проверяет, не являются ли значения параметров name, password, privs, expires, role_attr_flags, groups, comment, session_role потенциально опасными.Использование no имеет смысл только в том случае, если возможны SQL-инъекции через эти параметры. |
Примечания
Примечание
- Модуль создаёт пользователя (роль) с правом входа по умолчанию. Используйте
NOLOGINrole_attr_flags, чтобы изменить это поведение. - Если вы укажете
PUBLICв качестве пользователя (роли), то изменения привилегий применятся ко всем пользователям (ролям). Вы не можете указать пароль или role_attr_flags, когда указан пользовательPUBLIC. - Пароли, хэшированные с помощью SCRAM-SHA-256 (SASL Authentication), требуют PostgreSQL версии 10 или более поздней. В предыдущих версиях вся строка хэша используется в качестве пароля.
- При работе с паролями, хэшированными с помощью SCRAM-SHA-256, убедитесь, что вы используете переменную среды
PGOPTIONS: "-c password_encryption=scram-sha-256"(см. предоставленный пример). - В некоторых системах (таких как AWS RDS),
pg_authidнедоступен, поэтому модуль не может сравнить текущий и желаемыйpassword. В этом случае модуль предполагает, что пароли отличаются, и изменяет его, сообщая, что состояние было изменено. Чтобы пропустить все проверки, связанные с паролем для существующих пользователей, используйте no_password_changes=yes. - Поддерживает
check_mode. - По умолчанию аутентификация предполагает, что вы входите в систему или используете sudo для учётной записи
postgresна хосте. - Чтобы избежать ошибки «Ошибка аутентификации клиента для пользователя postgres», используйте пользователя postgres в качестве become_user.
- Этот модуль использует psycopg2, адаптер Python для базы данных PostgreSQL. Вы должны убедиться, что psycopg2 установлен на хосте перед использованием этого модуля.
- Если удалённый хост является сервером PostgreSQL (что является стандартным случаем), то PostgreSQL также должен быть установлен на удалённом хосте.
- Для систем на базе Ubuntu установите пакеты postgresql, libpq-dev и python-psycopg2 на удалённом хосте перед использованием этого модуля.
- Параметр ca_cert требует как минимум Postgres версии 8.4 и psycopg2 версии 2.4.3.
См. также
См. также
- community.postgresql.postgresql_privs
-
Официальная документация модуля community.postgresql.postgresql_privs.
- community.postgresql.postgresql_membership
-
Официальная документация модуля community.postgresql.postgresql_membership.
- community.postgresql.postgresql_owner
-
Официальная документация модуля community.postgresql.postgresql_owner.
- Роли базы данных PostgreSQL
-
Полное руководство по документации ролей базы данных PostgreSQL.
- Аутентификация PostgreSQL SASL
-
Полное руководство по аутентификации PostgreSQL SASL.
Примеры
- name: Connect to acme database, create django user, and grant access to database and products table
community.postgresql.postgresql_user:
db: acme
name: django
password: ceec4eif7ya
priv: "CONNECT/products:ALL"
expires: "Jan 31 2020"
- name: Add a comment on django user
community.postgresql.postgresql_user:
db: acme
name: django
comment: This is a test user
# Connect to default database, create rails user, set its password (MD5-hashed),
# and grant privilege to create other databases and demote rails from super user status if user exists
- name: Create rails user, set MD5-hashed password, grant privs
community.postgresql.postgresql_user:
name: rails
password: md59543f1d82624df2b31672ec0f7050460
role_attr_flags: CREATEDB,NOSUPERUSER
- name: Connect to acme database and remove test user privileges from there
community.postgresql.postgresql_user:
db: acme
name: test
priv: "ALL/products:ALL"
state: absent
fail_on_user: no
- name: Connect to test database, remove test user from cluster
community.postgresql.postgresql_user:
db: test
name: test
priv: ALL
state: absent
- name: Connect to acme database and set user's password with no expire date
community.postgresql.postgresql_user:
db: acme
name: django
password: mysupersecretword
priv: "CONNECT/products:ALL"
expires: infinity
# Example privileges string format
# INSERT,UPDATE/table:SELECT/anothertable:ALL
- name: Connect to test database and remove an existing user's password
community.postgresql.postgresql_user:
db: test
user: test
password: ""
- name: Create user test and grant group user_ro and user_rw to it
community.postgresql.postgresql_user:
name: test
groups:
- user_ro
- user_rw
# Create user with a cleartext password if it does not exist or update its password.
# The password will be encrypted with SCRAM algorithm (available since PostgreSQL 10)
- name: Create appclient user with SCRAM-hashed password
community.postgresql.postgresql_user:
name: appclient
password: "secret123"
environment:
PGOPTIONS: "-c password_encryption=scram-sha-256"
Значения возврата
Общие значения возврата описаны здесь, следующие являются уникальными полями этого модуля:
| Ключ | Возвращаемое значение | Описание |
|---|---|---|
| queries список / элементы=строка | всегда | Список выполненных запросов. Пример: ['CREATE USER "alice"', 'GRANT CONNECT ON DATABASE "acme" TO "alice"'] |
Авторы
- Команда разработчиков Ansible
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/community/postgresql/postgresql_user_module.html