Postgresql 可以使用事件触发器将新创建表的所有者更改为创建者不是其成员的角色吗?
我想在创建后更改postgreSQL表的所有者。到目前为止还不错Postgresql 可以使用事件触发器将新创建表的所有者更改为创建者不是其成员的角色吗?,postgresql,Postgresql,我想在创建后更改postgreSQL表的所有者。到目前为止还不错 CREATE OR REPLACE FUNCTION trg_create_set_table_owner() RETURNS event_trigger LANGUAGE plpgsql AS $$ DECLARE obj record; BEGIN FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands() WHERE command_tag='CREATE T
CREATE OR REPLACE FUNCTION trg_create_set_table_owner()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
DECLARE
obj record;
BEGIN
FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands() WHERE command_tag='CREATE TABLE' LOOP
EXECUTE format('ALTER TABLE %s OWNER TO blubb', obj.object_identity);
END LOOP;
END;
$$;
但是,我想将所有者更改为创建表的用户不属于的角色。这可能吗?定义者
因为安全定义函数是以的权限执行的
拥有它的用户需要注意确保该功能
不能滥用
除此之外,只需使用SU创建一个函数,该函数将接受tablename和rolename作为参数,并运行ALTERTABLE。将execute授予角色,使用trg\u create\u set\u table\u owner,它将工作。但是,角色可以在trg_create_set_table_owner之外使用更改表的功能的担忧仍然存在
当然,如果您添加一个SU函数,该函数将acpect tbalename和rolename作为带有安全定义符的参数-是的,我想我应该使用RTFM,那么您可以在将可能的角色名和表名传递给执行格式“将表%I所有者更改为%I”之前,从允许的列表中检查它们。非常感谢。安全定义是一个简单的部分。更难的一个-使函数对非预期用途安全也没有多大关系,但%s不是标识的最佳选择将非预期表所有者更改为blubb