postgresql 如何在postgres中使用仅具有只读(SELECT)访问权限的ansible创建用户

zour9fqk  于 2023-01-17  发布在  PostgreSQL
关注(0)|答案(1)|浏览(173)

我正在使用下面的代码创建postgres用户。它工作正常。

- name: create database user
  become_user: postgres
  postgresql_user: db={{ db_name }} name=username password=userpassword priv=CONNECT encrypted=yes state=present

但是,我希望此用户只给予只读访问权限。我希望只授予对公共模式中的表的选择操作。我可以使用以下查询来完成此操作

CREATE USER rouser WITH PASSWORD 'pass';
GRANT CONNECT ON DATABASE mydb TO rouser;
GRANT USAGE ON SCHEMA public TO rouser;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO rouser;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO rouser;

我可以使用创建此类用户

- name: modify user role 
  become_user: postgres 
  postgresql_privs: 
   db: mydb 
   role: qarouser 
   objs: ALL_IN_SCHEMA 
   privs: SELECT

然而,当我在同一个数据库中使用不同的用户创建一个新表时,这个用户没有对不同用户创建的表的选择访问权限,我该如何解决这个问题?

6rqinv9w

6rqinv9w1#

您已经有了修改用户角色任务,该任务可以访问当前对象,但缺少语句中的ALTER DEFAULT PRIVS...部分。您可以在此处获得更多示例和更好的解释。特别是添加SELECT和USAGE的示例(已修改以供您使用):

# 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 mydb TO qarouser, step 1
  community.postgresql.postgresql_privs:
    db: mydb
    objs: TABLES
    privs: SELECT
    type: default_privs
    role: qarouser

- name: ALTER DEFAULT PRIVILEGES ON DATABASE mydb TO qarouser, step 2
  community.postgresql.postgresql_privs:
    db: mydb
    objs: TYPES
    privs: USAGE
    type: default_privs
    role: qarouser

我只是不得不在我自己的剧本中处理它,并在寻找它时发现了你的问题。我不是DBA,也不在电视上扮演DBA。我没有住过任何能让我合格的豪华酒店。

相关问题