我希望有一个数据库的所有者,可以创建角色,并为该数据库执行所有管理任务。由数据库所有者创建的所有角色必须在公共模式中的所有表上具有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
架构中?怎么办呢?
1条答案
按热度按时间i7uq4tfw1#
我认为问题在于授予权限只适用于现有的项(调用grant时存在的public中的所有表)。您将在之后创建测试表,该表将从 DEFAULT PRIVILEGES 继承权限。
您可以编辑 DEFAULT PRIVILEGES,如下所示:https://www.postgresql.org/docs/current/sql-alterdefaultprivileges.html
作为第一个测试,首先创建表,授予所有权限,尝试使用db_owner帐户选择它,看看问题是否仍然存在。