我有一个包含多个表、函数、序列和类型的数据库。
我想要创建多个“管理员”-like用户:
它们都可能拥有管理此数据库中的一切(现有的和新创建的项)的所有特权;它们都具有相同的privileges;
a创建的表应该可供管理员b)删除)。
我试图创建类似的东西,但在类型上失败了:
"GRANT ALL PRIVILEGES ON DATABASE {dbname} TO {rw_user};"
"GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO {rw_user};"
"GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO {rw_user};"
"GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO {rw_user};"
"GRANT ALL PRIVILEGES ON ALL TYPES IN SCHEMA public TO {rw_user};" --not exists
"ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO {rw_user};"
"ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO {rw_user};"
"ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON FUNCTIONS TO {rw_user};"
"ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TYPES TO {rw_user};"发布于 2021-01-12 10:30:03
我能想到的唯一方法(如果您不希望共享数据库用户)是这样做的:
CREATE ROLE admins;
CREATE ROLE a LOGIN NOINHERIT IN ROLE admins;
CREATE ROLE b LOGIN NOINHERIT IN ROLE admins;
CREATE SCHEMA shared;
GRANT CREATE; USAGE ON SCHEMA shared TO admins;那么,a和b都不能在shared中创建对象,除非它们执行以下操作:
SET ROLE admins;
CREATE TABLE shared.newtab (...);
RESET ROLE;这样的表由admins拥有,a和b都可以ALTER或DROP。
请注意,ALTER和DROP仅限于对象的所有者,您不能GRANT这些权限。
https://stackoverflow.com/questions/65675645
复制相似问题