【发布时间】: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 ;
请让我知道我做错了什么。
【问题讨论】: