postgresql 数据库所有者不能授予选择

9wbgstp7  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(125)

我希望有一个数据库的所有者,可以创建角色,并为该数据库执行所有管理任务。由数据库所有者创建的所有角色必须在公共模式中的所有表上具有select权限,并且拥有自己的模式,在这些模式中他们拥有所有特权。所以我试着:

\connect postgres postgres;
create role db_owner with createrole password 'passwd' login;
create database db with owner db_owner;
\connect db db_owner;
grant select on all tables in schema public to public;
create table t (i int);
create role s1 with password 's1' login;
grant s1 to db_owner;
create schema authorization s1;

字符串
现在,当我以用户s1的身份尝试select from public.t时,它被拒绝了:

\connect db s1;
db=> select * from t;
ERROR:  permission denied for table t


如果grant select是由postgres发布的,则它可以工作:

db=> \connect db postgres
You are now connected to database "db" as user "postgres".
db=# grant select on all tables in schema public to public;
GRANT
db=# \connect db s1
You are now connected to database "db" as user "s1".
db=> select * from t;
 i 
---
(0 rows)


为什么数据库所有者grant select不能在public架构中?怎么办呢?

i7uq4tfw

i7uq4tfw1#

我认为问题在于授予权限只适用于现有的项(调用grant时存在的public中的所有表)。您将在之后创建测试表,该表将从 DEFAULT PRIVILEGES 继承权限。
您可以编辑 DEFAULT PRIVILEGES,如下所示:https://www.postgresql.org/docs/current/sql-alterdefaultprivileges.html
作为第一个测试,首先创建表,授予所有权限,尝试使用db_owner帐户选择它,看看问题是否仍然存在。

相关问题