postgresql_privs – Предоставление или отозвать привилегии на объекты базы данных PostgreSQL
Описание
- Предоставление или отозвать привилегии на объекты базы данных PostgreSQL.
- Этот модуль в основном является обёрткой вокруг большей части функциональности инструкций GRANT и REVOKE PostgreSQL с обнаружением изменений (GRANT/REVOKE privs ON type objs TO/FROM roles).
Требования
Ниже перечислены требования, необходимые на хосте, который выполняет этот модуль.
- psycopg2
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| ca_cert строка | Указывает имя файла, содержащего сертификаты (CA) сертификата(ов) SSL. Если файл существует, сертификат сервера будет проверен на подпись одним из этих сертификатов. псевдонимы: ssl_rootcert | |
| database строка / обязательный | Имя базы данных для подключения. псевдонимы: db, login_db | |
| fail_on_role булево добавлен в 2.8 |
| Если 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, вместо этого можно указать специальное значение ALL_IN_SCHEMA, чтобы указать все объекты базы данных типа type в схеме, указанной через schema. (Это также работает с PostgreSQL < 9.0.) (ALL_IN_SCHEMA доступно для function и partition table с версии 2.8)Если type равен database, этот параметр можно опустить, в этом случае привилегии устанавливаются для базы данных, указанной через database.Если type равен function, двоеточия (":") в именах объектов будут заменены запятыми (необходимо для указания сигнатур функций, см. примеры) псевдонимы: obj | |
| password строка | Пароль для аутентификации. псевдонимы: login_password | |
| port целое число | Значение по умолчанию: 5432 | Порт базы данных для подключения. псевдонимы: login_port |
| privs строка | Список привилегий, предоставляемых/отзываемых, разделенных запятыми. псевдонимы: priv | |
| roles строка / обязательный | Список имен ролей (пользователей/групп), для которых устанавливаются разрешения. Вместо этого можно указать специальное значение PUBLIC, чтобы установить разрешения для неявно определенной группы PUBLIC.псевдонимы: role | |
| schema строка | Схема, содержащая объекты базы данных, указанные через objs. Может быть указан только если type равен table, sequence, function или default_privs. По умолчанию public в этих случаях. | |
| session_role строка добавлен в 2.8 | Переключение на роль 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 строка добавлен в 2.8 | Список существующих имен ролей (пользователей/групп) для установки по умолчанию разрешений для объектов базы данных, которые они впоследствии создадут. Параметр target_roles доступен только с type=default_privs. | |
| type строка |
| Тип объекта базы данных, для которого нужно установить привилегии. Выбор `default_privs` доступен начиная с версии 2.7. Типы объектов 'foreign_data_wrapper' и 'foreign_server' доступны с версии Ansible '2.8'. |
| unix_socket строка | Путь к сокету Unix для локальных подключений. псевдонимы: login_unix_socket |
Примечания
Примечание
- Параметры, принимающие список, разделенный запятыми (privs, objs, roles), имеют имена алиасов в единственном числе (priv, obj, role).
- Чтобы отозвать только
GRANT OPTIONдля конкретного объекта, установите state вpresentи grant_option вno(см. примеры). - Обратите внимание, что при отзыве привилегий от роли R, эта роль может по-прежнему иметь доступ через привилегии, предоставленные любой роли, членом которой является R, включая
PUBLIC. - Обратите внимание, что при отзыве привилегий от роли R, вы делаете это как пользователь, указанный через login. Если R получила те же привилегии от другого пользователя, R может по-прежнему получать доступ к объектам базы данных через эти привилегии.
- При отзыве привилегий предполагается
RESTRICT(см. документацию PostgreSQL). - По умолчанию аутентификация предполагает, что вы либо входите в систему, либо используете sudo для учетной записи
postgresна хосте. - Чтобы избежать ошибки «Peer authentication failed for user 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.
См. также
См. также
- postgresql_user – Добавление или удаление пользователя (роли) из экземпляра сервера PostgreSQL
- Официальная документация модуля postgresql_user.
- postgresql_owner – Изменение владельца объекта базы данных PostgreSQL
- Официальная документация модуля postgresql_owner.
- postgresql_membership – Добавление или удаление ролей PostgreSQL из групп
- Официальная документация модуля postgresql_membership.
- Привилегии PostgreSQL
- Общая информация о привилегиях PostgreSQL.
- Справочник по команде GRANT PostgreSQL
- Полный справочник по документации команды GRANT PostgreSQL.
- Справочник по команде REVOKE PostgreSQL
- Полный справочник по документации команды REVOKE PostgreSQL.
Примеры
# 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
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
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
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
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
# Note the separation of arguments with colons.
- 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
# 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
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
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
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
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
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
# Available since version 2.8
- 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
# Available since version 2.8
- 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
# 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
postgresql_privs:
type: function
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
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
postgresql_privs:
db: library
state: absent
schema: library
objs: TABLES
privs: SELECT
type: default_privs
role: reader
target_roles: librarian
Значения возврата
Общие значения возврата описаны здесь, следующие являются полями, уникальными для данного модуля:
| Ключ | Возвращённое значение | Описание |
|---|---|---|
| queries список добавлен в 2.8 | всегда | Список выполненных запросов. Пример: ['REVOKE GRANT OPTION FOR INSERT ON TABLE "books" FROM "reader";'] |
Статус
- В этом модуле гарантированы изменения интерфейса, совместимые с предыдущими версиями. [stableinterface]
- Этот модуль поддерживается сообществом Ansible. [community]
Авторы
- Bernhard Weitzhofer (@b6d)
- Tobias Birkefeld (@tcraxs)
Подсказка
Если вы обнаружите какие-либо проблемы в данной документации, вы можете отредактировать этот документ, чтобы улучшить его.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.9/modules/postgresql_privs_module.html