community.postgresql.postgresql_owner 模块 – 更改 PostgreSQL 数据库对象的拥有者

注意

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

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

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

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

概要

  • 更改 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,则当 reassign_owned_by 角色不存在时失败。否则只警告并继续。

obj_nameobj_type 互斥。

选项

  • false

  • true ← (默认)

login_host

别名:host

字符串

运行数据库的主机。

如果使用 localhost 时遇到连接问题,请尝试使用 127.0.0.1 代替。

默认值: ""

login_password

字符串

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

默认值: ""

login_unix_socket

别名:unix_socket

字符串

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

默认值: ""

login_user

别名:login

字符串

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

默认值: "postgres"

new_owner

字符串 / 必需

设置为 obj_name 拥有者的角色(用户/组)。

obj_name

字符串

要更改所有权的数据库对象的名称。

reassign_owned_by 互斥。

obj_type

别名:type

字符串

数据库对象的类型。

reassign_owned_by 互斥。

自 PostgreSQL 9.3 起可用 obj_type=matview

自 PostgreSQL 11 起可用 obj_type=event_triggerobj_type=procedureobj_type=publicationobj_type=statisticsobj_type=routine

选项

  • "aggregate"

  • "collation"

  • "conversion"

  • "database"

  • "domain"

  • "event_trigger"

  • "foreign_data_wrapper"

  • "foreign_table"

  • "function"

  • "language"

  • "large_object"

  • "matview"

  • "procedure"

  • "publication"

  • "routine"

  • "schema"

  • "sequence"

  • "server"

  • "statistics"

  • "table"

  • "tablespace"

  • "text_search_configuration"

  • "text_search_dictionary"

  • "type"

  • "view"

port

别名:login_port

整数

要连接到的数据库端口。

默认值: 5432

reassign_owned_by

列表 / 元素=字符串

小心 - 指定的 db 中由此角色拥有的所有对象的拥有权将被重新分配给 new_owner

REASSIGN OWNED 通常用于准备删除一个或多个角色。

REASSIGN OWNED 不会影响其他数据库中的对象。

在包含由要删除的角色拥有的对象的每个数据库中执行此命令。

如果角色存在,则始终返回 changed 为 True。

无法重新分配数据库系统所需的对象的拥有权。

obj_type 互斥。

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"

trust_input

布尔值

在 community.postgresql 0.2.0 版本中添加。

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

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

选项

  • false

  • true ← (默认)

属性

属性

支持

描述

check_mode

支持:完全支持

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

备注

注意

  • 不支持函数重载,因此当 obj_typeaggregatefunctionroutineprocedure 时,obj_name 被认为是同类型且具有相同名称的唯一对象。

  • 尽管不支持函数重载,但当 obj_type=aggregate 时,obj_name 必须包含聚合签名,因为 SQL 语法需要它。

  • 如果 obj_typeevent_typeforeign_data_wrapper,则 new_owner 必须是超级用户。

  • 要管理订阅所有权,请使用 community.postgresql.postgresql_subscription 模块。

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

  • 为避免“Peer authentication failed for user 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_membership

将 PostgreSQL 角色添加到组或从组中移除。

community.postgresql.postgresql_subscription

添加、更新或删除 PostgreSQL 订阅。

PostgreSQL REASSIGN OWNED 命令参考

PostgreSQL REASSIGN OWNED 命令文档的完整参考。

示例

# Set owner as alice for function myfunc in database bar by ansible ad-hoc command:
# ansible -m postgresql_owner -a "db=bar new_owner=alice obj_name=myfunc obj_type=function"

- name: The same as above by playbook
  community.postgresql.postgresql_owner:
    db: bar
    new_owner: alice
    obj_name: myfunc
    obj_type: function

- name: Set owner as bob for table acme in database bar
  community.postgresql.postgresql_owner:
    db: bar
    new_owner: bob
    obj_name: acme
    obj_type: table

- name: Set owner as alice for view test_view in database bar
  community.postgresql.postgresql_owner:
    db: bar
    new_owner: alice
    obj_name: test_view
    obj_type: view

- name: Set owner as bob for tablespace ssd in database foo
  community.postgresql.postgresql_owner:
    db: foo
    new_owner: bob
    obj_name: ssd
    obj_type: tablespace

- name: Reassign all databases owned by bob to alice and all objects in database bar owned by bob to alice
  community.postgresql.postgresql_owner:
    db: bar
    new_owner: alice
    reassign_owned_by: bob

- name: Reassign all databases owned by bob or bill to alice and all objects in database bar owned by bob or bill to alice
  community.postgresql.postgresql_owner:
    db: bar
    new_owner: alice
    reassign_owned_by:
    - bob
    - bill

返回值

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

描述

queries

字符串

已执行查询的列表。

返回:成功

示例:"['REASSIGN OWNED BY \"bob\" TO \"alice\"']"

作者

  • Andrew Klychkov (@Andersson007)

  • Daniele Giudice (@RealGreenDragon)