微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Postgres中创建表时自动重新分配所有者

如何解决在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 举报,一经查实,本站将立刻删除。