我必须创建一个数据库[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;
到目前为止,我没有任何问题。
我在user-admin的帮助下在mySchema中创建了表,以后也可以这样工作。
剩下的两个用户将仅用于读取,另一个用于读写。
问题是我无法从其他用户(包括postgres,user-rw,user-ro)看到创建的表,但是只有拥有者user-admin的所有者有权执行所有操作,例如create和drop。 / p>
此外,从管理员用户创建表后,当我按以下命令重新运行时,它给了我拒绝权限。
GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA mySchema TO user-rw ;
请让我知道我做错了。
答案 0 :(得分:0)
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中的所有表上进行GRANT SELECT,INSERT,UPDATE到user-rw ;
关于此部分,请确保您正在使用管理员授予权限。