目前我正在使用它来授予权限:
grant select on all tables in schema public to <user_name>;
alter default privileges in schema public grant select on tables to <user_name>;
根据documentation,第二个陈述应该已经解决了问题。但是,当将新表添加到公共模式时,它不会自动向user_name授予权限。
我正在使用此用户(user_name)将数据复制到另一个数据库。
答案 0 :(得分:10)
找到答案。它在文档中的这一行。
“您只能为将由您自己或您所属的角色创建的对象更改默认权限。”
我使用的是与创建表的用户不同的用户的alter default权限。
答案 1 :(得分:3)
我一直在寻找相同的东西,我找到了解决这个问题的其他方法。基于postgresql文档,我们可以创建事件触发器,因此在创建新表时,grant查询将自动执行。所以无论是谁创建了新表,其他用户都允许使用它。
CREATE OR REPLACE FUNCTION auto_grant_func()
RETURNS event_trigger AS $$
BEGIN
grant all on all tables in schema public to <username>;
grant all on all sequences in schema public to <username>;
grant select on all tables in schema public to <username>;
grant select on all sequences in schema public to <username>;
END;
$$ LANGUAGE plpgsql;
CREATE EVENT TRIGGER auto_grant_trigger
ON ddl_command_end
WHEN TAG IN ('CREATE TABLE', 'CREATE TABLE AS')
EXECUTE PROCEDURE auto_grant_func();
答案 2 :(得分:1)
要授予默认特权,U实际上需要向创建表的用户授予权限。
例如:您以SA_user的身份创建表,但读取表的状态为READ_user。您的代码需要看起来像:
ALTER DEFAULT PRIVILEGES
FOR USER SA_user
IN SCHEMA schema_name
GRANT SELECT ON TABLES TO READ_user;
因此,只要SA_user创建表,它将授予READ_user的选择权限。