Postgres授予特权问题

时间:2020-01-10 12:28:53

标签: postgresql postgresql-11

我必须创建一个数据库[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 ;

请让我知道我做错了。

1 个答案:

答案 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 ;

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