ish*_*han 13 postgresql grant database-permissions
目前我正在使用它来授予权限:
grant select on all tables in schema public to <user_name>;
alter default privileges in schema public grant select on tables to <user_name>;
Run Code Online (Sandbox Code Playgroud)
根据文档,第二个声明应该已经解决了问题.但是,当将新表添加到公共模式时,它不会自动向user_name授予权限.
我正在使用此用户(user_name)将数据复制到另一个数据库.
小智 8
要授予默认权限,您需要授予您创建表的用户。
您正在将表创建为SA_user,但将表读取为READ_user。您的代码需要如下所示:
ALTER DEFAULT PRIVILEGES
FOR USER SA_user
IN SCHEMA schema_name
GRANT SELECT ON TABLES TO READ_user;
Run Code Online (Sandbox Code Playgroud)
因此,无论何时SA_user创建表,它都会授予READ_user.
我在寻找同一件事,所以找到了其他解决办法。根据postgresql文档,我们可以创建事件触发器,因此在创建新表时,授权查询将自动执行。因此,无论谁创建了新表,其他用户都可以使用它。
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();
Run Code Online (Sandbox Code Playgroud)