如何解决在Postgres中创建表时自动重新分配所有者
我有一个模式为sandBox
的Postgres数据库,其中角色bi_developer
具有所有授权。
真实用户具有个人角色,其中bi_developer
是父母。
但是,当某些用户创建新表时,其他用户则没有权限。然后我一次又一次地为GRANT ALL ....
制作bi_developer
。
有没有办法自动做到?
解决方法
我们尝试使用不同的变量,包括默认特权,但是在Greenplum安装中没有按预期工作,现在我们使用触发器,将所有新表转移为read_only
角色:
-- CREATE FUNCTION
CREATE OR REPLACE FUNCTION sandbox.set_object_owner()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
DECLARE
obj record;
BEGIN
FOR obj IN SELECT schemaname,objname,subtype
from pg_stat_operations
where schemaname = 'sandbox'
and actionname = 'CREATE'
and subtype in ('TABLE','VIEW')
loop
if obj.subtype = 'TABLE'
then
EXECUTE format('ALTER TABLE %s.%s OWNER TO read_only',obj.schemaname,obj.objname);
end if;
if obj.subtype = 'VIEW'
then
EXECUTE format('ALTER VIEW %s.%s OWNER TO read_only',obj.objname);
end if;
END LOOP;
END;
$$
-- CREATE TRIGGER
CREATE EVENT TRIGGER trg_set_owner
ON ddl_command_end
WHEN tag IN ('CREATE TABLE','CREATE TABLE AS','CREATE VIEW')
EXECUTE PROCEDURE sandbox.set_object_owner();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。