【问题标题】:Postgres grant privileges issuePostgres授予权限问题
【发布时间】:2020-01-10 12:28:53
【问题描述】:

我必须创建一个数据库 [myDB] 和一个自定义架构 [mySchema] 而不是公共架构。

我哪里出错了:

我创建了 3 个用户:user_admin、user_rw、user_ro,它们将被授予访问权限。

现在,我使用我的超级用户登录:postgres [我在 GCP 上使用 postgres 11] 通过云 shell。

创建了我的数据库:myDB,我进入了 myDB。我为所有 3 个用户访问了以下命令。

# for admin user
GRANT CONNECT ON DATABASE myDB TO user-admin;
GRANT USAGE ON SCHEMA mySchema TO user-admin ;
GRANT ALL PRIVILEGES ON SCHEMA mySchema TO user-admin ;
GRANT ALL ON ALL TABLES IN SCHEMA mySchema TO user-admin ;
GRANT ALL ON ALL SEQUENCES IN SCHEMA mySchema TO user-admin ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA mySchema TO user-admin ;
ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema GRANT ALL PRIVILEGES ON TABLES TO user-admin;

# for read write user
GRANT CONNECT ON DATABASE myDB TO user-rw;
GRANT USAGE ON SCHEMA mySchema TO user-rw ;
GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA mySchema TO user-rw ;
GRANT SELECT,UPDATE ON ALL SEQUENCES IN SCHEMA mySchema TO user-rw ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA mySchema TO user-rw ;
ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema GRANT SELECT,INSERT,UPDATE ON TABLES TO user-rw;


# for read only user 
GRANT CONNECT ON DATABASE myDB TO user-ro;
GRANT USAGE ON SCHEMA mySchema TO user-ro ;
GRANT SELECT ON ALL TABLES IN SCHEMA mySchema TO user-ro ;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA mySchema TO user-ro ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA mySchema TO user-ro ;
ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema GRANT SELECT ON TABLES TO user-ro;

到目前为止,我没有任何问题。

我在用户管理员的帮助下在 mySchema 中创建了表,以后也会这样工作。

剩下的两个用户将只用于读取,另一个用于读写。

问题是我无法看到其他用户创建的表,包括 postgres、user-rw、user-ro,但只有 user-admin 的所有者有权执行所有操作,如创建和删除。

另外,从管理员用户创建表后,当我重新运行以下命令时,它给了我权限被拒绝。

GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA mySchema TO user-rw ;

请让我知道我做错了什么。

【问题讨论】:

    标签: postgresql postgresql-11


    【解决方案1】:
    GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA mySchema TO user-rw ;
    

    VS

    ALTER DEFAULT PRIVILEGES IN SCHEMA public
       GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA mySchema TO user-rw ;
    

    第一个选项授予存在表的权限,第二个选项授予您存在的权限以及将来创建的新表,

    但他最好的方法是不要将此权限直接应用于用户,创建一个组并在那里授予权限并将组分配给用户,如果你想先删除用户,你需要删除所有权限创建后你可以删除用户。

    另外,从管理员用户创建表后,当我在下面重新运行时 命令,它给了我权限被拒绝。

    将 SCHEMA mySchema 中所有表的选择、插入、更新权限授予 user-rw ;

    关于这部分,请确保您使用管理员授予权限。

    【讨论】:

    • 所有提到的命令都是使用 sqlsuperuser[postgres] 触发的,这就是我无法理解为什么抛出异常的原因。
    • 第一种情况,当我为所有用户创建所有权限时没有问题,但是一旦我通过管理员用户创建表,其余用户就无法看到创建的表,现在该做什么怎么让它对所有用户可见?其次,如果我尝试再次赋予这些相同的权限,则命令行响应错误权限被拒绝,尽管我使用的是 postgres 超级用户 [我使用 Google 管理的 postgres 实例]
    猜你喜欢
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2021-02-20
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多