community.postgresql.postgresql_membership 模块 – 在组中添加或删除 PostgreSQL 角色

注意

此模块是 community.postgresql 集合 (版本 3.9.0) 的一部分。

如果您使用的是 ansible 包,则可能已经安装了此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.postgresql。您需要其他要求才能使用此模块,有关详细信息,请参阅 需求

要在 playbook 中使用它,请指定:community.postgresql.postgresql_membership

概要

  • 在组(其他角色)中添加或删除 PostgreSQL 角色。

  • 用户是具有登录权限的角色。

  • 组是 PostgreSQL 角色,通常没有 LOGIN 权限。

  • 常见用例

    1. 使用 community.postgresql.postgresql_user 模块和 `role_attr_flags=NOLOGIN` 添加新的组

    1. 使用 community.postgresql.postgresql_privs 模块授予它们所需的权限

    1. 使用此模块将所需的 PostgreSQL 用户添加到新组。

需求

执行此模块的主机需要以下需求。

  • psycopg2 >= 2.5.1

参数

参数

注释

ca_cert

别名:ssl_rootcert

字符串

指定包含 SSL 证书颁发机构 (CA) 证书的文件的名称。

如果文件存在,则服务器的证书将被验证是否已由这些机构之一签名。

connect_params

字典

在 community.postgresql 2.3.0 中添加

要传递给 libpg 的任何其他参数。

这些参数优先。

默认值: {}

db

别名:login_db

字符串

要连接到的数据库的名称。

fail_on_role

布尔值

如果 true,则在组或 target_role 不存在时失败。如果 false,则仅警告并继续。

选项

  • false

  • true ← (默认值)

groups

别名:group, source_role, source_roles

列表 / 元素=字符串 / 必需

需要授予或撤销给 `target_roles` 的组(角色)列表。

login_host

别名:host

字符串

运行数据库的主机。

如果您在使用 localhost 时遇到连接问题,请尝试使用 127.0.0.1

默认值: ""

login_password

字符串

此模块应用于建立其 PostgreSQL 会话的密码。

默认值: ""

login_unix_socket

别名:unix_socket

字符串

本地连接的 Unix 域套接字的路径。

默认值: ""

login_user

别名:login

字符串

此模块应用于建立其 PostgreSQL 会话的用户名。

默认值: "postgres"

port

别名:login_port

整数

要连接到的数据库端口。

默认值: 5432

session_role

字符串

连接后切换到 session_role。指定的 session_role 必须是当前 login_user 所属的角色。

SQL 命令的权限检查将像 session_role 是最初登录的角色一样进行。

ssl_cert

路径

在 community.postgresql 2.4.0 中添加

指定客户端 SSL 证书的文件名。

ssl_key

路径

在 community.postgresql 2.4.0 中添加

指定用于客户端证书的密钥的位置。

ssl_mode

字符串

确定是否以及使用什么优先级与服务器协商安全的 SSL TCP/IP 连接。

有关模式的更多信息,请参见 https://postgresql.ac.cn/docs/current/static/libpq-ssl.html

prefer 的默认值与 libpq 默认值匹配。

选项

  • "allow"

  • "disable"

  • "prefer" ← (默认值)

  • "require"

  • "verify-ca"

  • "verify-full"

state

字符串

成员状态。

`state=present` 表示必须将 `groups` 授予 `target_roles`。

`state=absent` 表示必须从 `target_roles` 撤销 `groups`。

`state=exact` 表示 `target_roles` 将仅是 `groups` 的成员(自 community.postgresql 2.2.0 起可用)。任何其他组都将从 `target_roles` 中撤销。

选项

  • "absent"

  • "exact"

  • "present" ← (默认值)

target_roles

别名: target_role, users, user

列表 / 元素=字符串 / 必需

目标角色列表(组将被授予这些角色)。

trust_input

布尔值

在 community.postgresql 0.2.0 版本中添加

如果为 false,则检查参数 groupstarget_rolessession_role 的值是否潜在危险。

只有当可能通过参数进行 SQL 注入时,使用 false 才合乎情理。

选项

  • false

  • true ← (默认值)

属性

属性

支持

描述

check_mode

支持: 完全支持

可以在 check_mode 下运行,并在不修改目标的情况下返回更改状态预测。

备注

注意

  • 默认身份验证假设您正在以主机上的 postgres 帐户登录或使用 sudo。

  • 为避免“用户 postgres 的对等身份验证失败”错误,请使用 postgres 用户作为 become_user

  • 此模块使用 psycopg,这是一个 Python PostgreSQL 数据库适配器。在使用此模块之前,必须确保主机上安装了 psycopg2 >= 2.5.1psycopg3 >= 3.1.8

  • 如果远程主机是 PostgreSQL 服务器(这是默认情况),则必须在远程主机上安装 PostgreSQL。

  • 对于基于 Ubuntu 的系统,在使用此模块之前,请在远程主机上安装 postgresqllibpq-devpython3-psycopg2 包。

另请参阅

另请参阅

community.postgresql.postgresql_user

创建、更改或删除 PostgreSQL 服务器实例中的用户(角色)。

community.postgresql.postgresql_privs

授予或撤销 PostgreSQL 数据库对象的权限。

community.postgresql.postgresql_owner

更改 PostgreSQL 数据库对象的拥有者。

PostgreSQL 角色成员资格参考

PostgreSQL 角色成员资格文档的完整参考。

PostgreSQL 角色属性参考

PostgreSQL 角色属性文档的完整参考。

示例

- name: Grant role read_only to alice and bob
  community.postgresql.postgresql_membership:
    group: read_only
    target_roles:
    - alice
    - bob
    state: present

# you can also use target_roles: alice,bob,etc to pass the role list

- name: Revoke role read_only and exec_func from bob. Ignore if roles don't exist
  community.postgresql.postgresql_membership:
    groups:
    - read_only
    - exec_func
    target_role: bob
    fail_on_role: false
    state: absent

- name: >
    Make sure alice and bob are members only of marketing and sales.
    If they are members of other groups, they will be removed from those groups
  community.postgresql.postgresql_membership:
    group:
    - marketing
    - sales
    target_roles:
    - alice
    - bob
    state: exact

- name: Make sure alice and bob do not belong to any groups
  community.postgresql.postgresql_membership:
    group: []
    target_roles:
    - alice
    - bob
    state: exact

返回值

常用返回值已在此处记录,以下是此模块特有的字段

描述

granted

字典

已授予的组和角色的字典。

返回:如果 state=present

示例: {"ro_group": ["alice", "bob"]}

queries

字符串

已执行查询的列表。

返回:成功

示例: "['GRANT \"user_ro\" TO \"alice\"']"

revoked

字典

已撤销的组和角色的字典。

返回:如果 state=absent

示例: {"ro_group": ["alice", "bob"]}

state

字符串

尝试设置的成员资格状态。

返回:成功

示例: "present"

作者

  • Andrew Klychkov (@Andersson007)