我想使用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”}
答案 0 :(得分:1)
删除参数 privs 中的额外空格以解决第一个问题。 请尝试以下
privs:CREATE,USAGE
要解决第二个问题,请明确指定参数 host 。例如:
主持人:127.0.0.1
或者修复你的pg_hba.conf文件。 根据关于auth-methods的官方PostgreSQL文档:
同行身份验证
对等身份验证方法通过获取客户端来工作 来自内核的操作系统用户名并将其用作允许的 数据库用户名(带有可选的用户名映射)。这个方法是 仅在本地连接上受支持。