使用Ansible的postgresql_privs锁定Postgres公共模式

时间:2017-01-24 23:00:53

标签: postgresql ansible

我想使用Ansible锁定postgres数据库中的公共模式。 在新创建的postgres安装中使用psql:

postgres=# REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE
postgres=# REVOKE USAGE ON SCHEMA public FROM PUBLIC;
REVOKE

第一次工作。

使用Ansible虽然我遇到了各种错误。

- name: Lock down PUBLIC schema
  postgresql_privs:
      db: BOB
      schema: public
      state: absent
      privs: CREATE, USAGE
      objs: public
      role: PUBLIC
  become: true
  become_user: postgres

第一个错误抱怨数据库BOB不存在 - 它没有,我还没有创建它 - 但这似乎并不打扰psql。 postgresql_privs 必须使用 db:参数,所以我先通过创建BOB解决了这个问题。

我的最新努力(上面的Ansible节)让我

  

致命:[hostname.net]:失败了! => {“已更改”:false,“failed”:true,“msg”:“指定的权限无效:frozenset(['USAGE'])”}

我已经浏览了Ansible documentation并玩了各种参数,但没有运气。

认为可能指定了无效的权限与拥有BOB数据库的用户有关我使用上面的节并附加了一行

login: fred

(即我成为数据库BOB所有者的用户),但也没有用:

  

致命:[hostname.net]:失败了! => {“已更改”:false,“failed”:true,“msg”:“无法连接到数据库:致命:用户对等身份验证失败\”fred \“\ n”}

1 个答案:

答案 0 :(得分:1)

删除参数 privs 中的额外空格以解决第一个问题。 请尝试以下

  

privs:CREATE,USAGE

要解决第二个问题,请明确指定参数 host 。例如:

  

主持人:127.0.0.1

或者修复你的pg_hba.conf文件。 根据关于auth-methods的官方PostgreSQL文档:

  

同行身份验证

     

对等身份验证方法通过获取客户端来工作   来自内核的操作系统用户名并将其用作允许的   数据库用户名(带有可选的用户名映射)。这个方法是   仅在本地连接上受支持。