community.postgresql.postgresql_user – Создание, изменение или удаление пользователя (роли) в экземпляре сервера PostgreSQL
Примечание
Этот плагин входит в коллекцию community.postgresql (версия 1.0.0).
Для его установки используйте: ansible-galaxy collection install community.postgresql.
Для использования в плейбуке укажите: 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. Обратите внимание, что '[NO]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), требуют PostgreSQL версии 10 или новее. В предыдущих версиях вся хэшированная строка используется как пароль.
- При работе с паролями, хэшированными с использованием SCRAM-SHA-256, убедитесь, что вы используете переменную окружения
PGOPTIONS: "-c password_encryption=scram-sha-256"(см. предоставленный пример). - Поддерживает
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 Core
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/collections/community/postgresql/postgresql_user_module.html