community.postgresql.postgresql_privs – Предоставление или отзыв привилегий на объекты базы данных PostgreSQL
Примечание
Этот плагин входит в коллекцию community.postgresql (версия 1.1.1).
Для его установки используйте: ansible-galaxy collection install community.postgresql
Для использования в книге задач укажите: community.postgresql.postgresql_privs
Краткое описание
- Предоставление или отзыв привилегий на объекты базы данных PostgreSQL.
- Этот модуль представляет собой оболочку большей части функциональности операторов GRANT и REVOKE PostgreSQL с обнаружением изменений (GRANT/REVOKE privs ON type objs TO/FROM roles).
Требования
Ниже перечислены требования к хосту, на котором выполняется этот модуль.
- psycopg2
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| ca_cert строка | Указывает имя файла, содержащего сертификаты центра сертификации (CA). Если файл существует, сертификат сервера будет проверен на подпись одним из этих центров. псевдонимы: ssl_rootcert | |
| database строка / обязательный | Имя базы данных для подключения. псевдонимы: db, login_db | |
| fail_on_role логическое |
| Если yes, завершить выполнение, если целевая роль (для которой необходимо предоставить привилегии) не существует. В противном случае вывести предупреждение и продолжить. |
| grant_option логическое |
| Может ли role предоставлять/отзывать указанные привилегии/группы членства другим.Установить в no для отзыва GRANT OPTION, оставить без значения, чтобы не вносить изменений.grant_option действует только если state равно present.псевдонимы: admin_option |
| host строка | Адрес хоста базы данных. Если не указано, подключиться через Unix-сокет. псевдонимы: login_host | |
| login строка | Значение по умолчанию: "postgres" | Имя пользователя для аутентификации. псевдонимы: login_user |
| login_host строка | Хост, на котором запущена база данных. | |
| login_password строка | Пароль для аутентификации. | |
| login_unix_socket строка | Путь к Unix-доменному сокету для локальных подключений. | |
| login_user строка | Значение по умолчанию: "postgres" | Имя пользователя для аутентификации. |
| objs строка | Список объектов базы данных, разделенных запятыми, для которых нужно установить привилегии. Если type равен table, partition table, sequence, function или procedure, можно использовать специальное значениеC(ALL_IN_SCHEMA), чтобы указать все объекты базы данных типа type в схеме, указанной через schema. (Это также работает с PostgreSQL < 9.0.) (ALL_IN_SCHEMA доступно для function и partition table начиная с Ansible 2.8).procedure поддерживается с PostgreSQL 11 и коллекцией community.postgresql 1.3.0.Если type равен database, этот параметр можно опустить, в этом случае привилегии устанавливаются для базы данных, указанной через database. Если type равен function или procedure, двоеточия (":") в именах объектов будут заменены запятыми (необходимо для указания сигнатур, см. примеры). псевдонимы: obj | |
| password строка | Пароль для аутентификации. псевдонимы: login_password | |
| port целое число | Значение по умолчанию: 5432 | Порт базы данных для подключения. псевдонимы: login_port |
| privs строка | Список привилегий, которые необходимо предоставить/отказать, разделенные запятыми. псевдонимы: priv | |
| roles строка / обязательный | Список имен ролей (пользователей/групп) для которых устанавливаются разрешения. Можно использовать специальное значение PUBLIC, чтобы установить разрешения для неявной группы PUBLIC.псевдонимы: role | |
| schema строка | Схема, содержащая объекты базы данных, указанные через objs. Может быть предоставлен только если type равен table, sequence, function, procedure, type, или default_privs. По умолчанию public в этих случаях.Обратите внимание, для встроенных типов, когда type=type schema может быть pg_catalog или information_schema соответственно. | |
| session_role строка | Переключение на session_role после подключения. Указанная session_role должна быть ролью, членом которой является текущий login_user. Проверка разрешений для SQL-команд выполняется так, как будто session_role была той, которая изначально вошла в систему. | |
| ssl_mode строка |
| Определяет, будет ли и с какой приоритетностью устанавливаться защищенное SSL TCP/IP-соединение с сервером. См. https://www.postgresql.org/docs/current/static/libpq-ssl.html для получения дополнительной информации о режимах. Значение по умолчанию prefer соответствует значению по умолчанию libpq. |
| state строка |
| Если present, указанные привилегии предоставляются, если absent они отзываются. |
| target_roles строка | Список существующих имен ролей (пользователей/групп), которые устанавливаются по умолчанию для разрешений на объекты базы данных, создаваемые ими впоследствии. Параметр target_roles доступен только с type=default_privs. | |
| trust_input логическое добавлен в 0.2.0 community.postgresql |
| Если no, проверить, являются ли значения параметров roles, target_roles, session_role, schema потенциально опасными.Использование no имеет смысл только в том случае, если возможны SQL-инъекции через параметры. |
| type строка |
| Тип объекта базы данных, для которого необходимо установить привилегии. Выбор default_privs доступен начиная с версии 2.7.Объекты типов foreign_data_wrapper и foreign_server доступны с Ansible версии 2.8.Выбор type доступен с Ansible версии 2.10.Выбор procedure поддерживается с версии коллекции 1.3.0 и PostgreSQL 11. |
| unix_socket строка | Путь к Unix-доменному сокету для локальных подключений. псевдонимы: login_unix_socket | |
| usage_on_types логическое добавлен в 1.2.0 community.postgresql |
| При добавлении привилегий по умолчанию, модуль всегда неявно добавляет ``USAGE ON TYPES``. Чтобы избежать этого поведения, установите usage_on_types в no.Добавлен для сохранения обратной совместимости. Используется только при добавлении привилегий по умолчанию, в противном случае игнорируется. |
Примечания
Примечание
- Поддерживает
check_mode. - Параметры, принимающие списки, разделённые запятыми (privs, objs, roles), имеют алиасы в единственном числе (priv, obj, role).
- Чтобы отозвать только
GRANT OPTIONдля определённого объекта, установите state в значениеpresentи grant_option в значениеno(см. примеры). - Обратите внимание, что при отмене привилегий для роли R, эта роль может всё ещё иметь доступ через привилегии, предоставленные любой роли, членом которой является R, включая
PUBLIC. - Обратите внимание, что при использовании роли
PUBLIC, модуль всегда сообщает, что состояние изменено. - Обратите внимание, что при отмене привилегий для роли R, это выполняется как пользователь, указанный через login. Если R также получила те же привилегии другим пользователем, R всё ещё может получить доступ к объектам базы данных через эти привилегии.
- При отмене привилегий предполагается
RESTRICT(см. документацию PostgreSQL). - По умолчанию аутентификация предполагает, что вы вошли как или используете 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_user
-
Официальная документация модуля community.postgresql.postgresql_user.
- community.postgresql.postgresql_owner
-
Официальная документация модуля community.postgresql.postgresql_owner.
- community.postgresql.postgresql_membership
-
Официальная документация модуля community.postgresql.postgresql_membership.
- Привилегии PostgreSQL
-
Общая информация о привилегиях PostgreSQL.
- Справочник по команде PostgreSQL GRANT
-
Полное руководство по команде PostgreSQL GRANT.
- Справочник по команде PostgreSQL REVOKE
-
Полное руководство по команде PostgreSQL REVOKE.
Примеры
# On database "library":
# GRANT SELECT, INSERT, UPDATE ON TABLE public.books, public.authors
# TO librarian, reader WITH GRANT OPTION
- name: Grant privs to librarian and reader on database library
community.postgresql.postgresql_privs:
database: library
state: present
privs: SELECT,INSERT,UPDATE
type: table
objs: books,authors
schema: public
roles: librarian,reader
grant_option: yes
- name: Same as above leveraging default values
community.postgresql.postgresql_privs:
db: library
privs: SELECT,INSERT,UPDATE
objs: books,authors
roles: librarian,reader
grant_option: yes
# REVOKE GRANT OPTION FOR INSERT ON TABLE books FROM reader
# Note that role "reader" will be *granted* INSERT privilege itself if this
# isn't already the case (since state: present).
- name: Revoke privs from reader
community.postgresql.postgresql_privs:
db: library
state: present
priv: INSERT
obj: books
role: reader
grant_option: no
# "public" is the default schema. This also works for PostgreSQL 8.x.
- name: REVOKE INSERT, UPDATE ON ALL TABLES IN SCHEMA public FROM reader
community.postgresql.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
community.postgresql.postgresql_privs:
db: library
privs: ALL
type: schema
objs: public,math
role: librarian
# Note the separation of arguments with colons.
- name: GRANT ALL PRIVILEGES ON FUNCTION math.add(int, int) TO librarian, reader
community.postgresql.postgresql_privs:
db: library
privs: ALL
type: function
obj: add(int:int)
schema: math
roles: librarian,reader
# Note that group role memberships apply cluster-wide and therefore are not
# restricted to database "library" here.
- name: GRANT librarian, reader TO alice, bob WITH ADMIN OPTION
community.postgresql.postgresql_privs:
db: library
type: group
objs: librarian,reader
roles: alice,bob
admin_option: yes
# Note that here "db: postgres" specifies the database to connect to, not the
# database to grant privileges on (which is specified via the "objs" param)
- name: GRANT ALL PRIVILEGES ON DATABASE library TO librarian
community.postgresql.postgresql_privs:
db: postgres
privs: ALL
type: database
obj: library
role: librarian
# If objs is omitted for type "database", it defaults to the database
# to which the connection is established
- name: GRANT ALL PRIVILEGES ON DATABASE library TO librarian
community.postgresql.postgresql_privs:
db: library
privs: ALL
type: database
role: librarian
# Available since version 2.7
# Objs must be set, ALL_DEFAULT to TABLES/SEQUENCES/TYPES/FUNCTIONS
# ALL_DEFAULT works only with privs=ALL
# For specific
- name: ALTER DEFAULT PRIVILEGES ON DATABASE library TO librarian
community.postgresql.postgresql_privs:
db: library
objs: ALL_DEFAULT
privs: ALL
type: default_privs
role: librarian
grant_option: yes
# Available since version 2.7
# Objs must be set, ALL_DEFAULT to TABLES/SEQUENCES/TYPES/FUNCTIONS
# ALL_DEFAULT works only with privs=ALL
# For specific
- name: ALTER DEFAULT PRIVILEGES ON DATABASE library TO reader, step 1
community.postgresql.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
community.postgresql.postgresql_privs:
db: library
objs: TYPES
privs: USAGE
type: default_privs
role: reader
# Available since version 2.8
- name: GRANT ALL PRIVILEGES ON FOREIGN DATA WRAPPER fdw TO reader
community.postgresql.postgresql_privs:
db: test
objs: fdw
privs: ALL
type: foreign_data_wrapper
role: reader
# Available since community.postgresql 0.2.0
- name: GRANT ALL PRIVILEGES ON TYPE customtype TO reader
community.postgresql.postgresql_privs:
db: test
objs: customtype
privs: ALL
type: type
role: reader
# Available since version 2.8
- name: GRANT ALL PRIVILEGES ON FOREIGN SERVER fdw_server TO reader
community.postgresql.postgresql_privs:
db: test
objs: fdw_server
privs: ALL
type: foreign_server
role: reader
# Available since version 2.8
# Grant 'execute' permissions on all functions in schema 'common' to role 'caller'
- name: GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA common TO caller
community.postgresql.postgresql_privs:
type: function
state: present
privs: EXECUTE
roles: caller
objs: ALL_IN_SCHEMA
schema: common
# Available since collection version 1.3.0
# Grant 'execute' permissions on all procedures in schema 'common' to role 'caller'
# Needs PostreSQL 11 or higher and community.postgresql 1.3.0 or higher
- name: GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA common TO caller
community.postgresql.postgresql_privs:
type: prucedure
state: present
privs: EXECUTE
roles: caller
objs: ALL_IN_SCHEMA
schema: common
# Available since version 2.8
# ALTER DEFAULT PRIVILEGES FOR ROLE librarian IN SCHEMA library GRANT SELECT ON TABLES TO reader
# GRANT SELECT privileges for new TABLES objects created by librarian as
# default to the role reader.
# For specific
- name: ALTER privs
community.postgresql.postgresql_privs:
db: library
schema: library
objs: TABLES
privs: SELECT
type: default_privs
role: reader
target_roles: librarian
# Available since version 2.8
# ALTER DEFAULT PRIVILEGES FOR ROLE librarian IN SCHEMA library REVOKE SELECT ON TABLES FROM reader
# REVOKE SELECT privileges for new TABLES objects created by librarian as
# default from the role reader.
# For specific
- name: ALTER privs
community.postgresql.postgresql_privs:
db: library
state: absent
schema: library
objs: TABLES
privs: SELECT
type: default_privs
role: reader
target_roles: librarian
# Available since community.postgresql 0.2.0
- name: Grant type privileges for pg_catalog.numeric type to alice
community.postgresql.postgresql_privs:
type: type
roles: alice
privs: ALL
objs: numeric
schema: pg_catalog
db: acme
Значения возврата
Общие значения возврата описаны здесь, ниже приведены поля, уникальные для этого модуля:
| Ключ | Возвращаемое значение | Описание |
|---|---|---|
| queries список / элементы=строка | всегда | Список выполненных запросов. Пример: ['REVOKE GRANT OPTION FOR INSERT ON TABLE "books" FROM "reader";'] |
Авторы
- Bernhard Weitzhofer (@b6d)
- Tobias Birkefeld (@tcraxs)
© 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_privs_module.html