如何将 select 授予 PostgreSQL 中架构内的所有项目?
我正在尝试在我的 PostgreSQL 数据库中创建一个
read-only
用户。我所有的桌子和视图都位于schema1
内。有时,会在 schema1
内添加新视图,但只读用户无法读取新创建的视图。
是否有一种方法可以授予对架构中所有项目的选择权,以便用户也可以读取任何新创建的架构?
我当前的代码是:
CREATE ROLE readonly;
GRANT CONNECT ON DATABASE postgres TO readonly;
GRANT USAGE ON SCHEMA schema1 TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA schema1 TO readonly;
我知道我也可以添加一行来向模式中的视图授予选择权限,但我正在寻找一种在添加新视图时也能工作的解决方案。
ALTER DEFAULT PRIVILEGES IN SCHEMA schema1 GRANT SELECT ON TABLES TO readonly;
使用事件触发器,您可以处理这个问题:
CREATE OR REPLACE FUNCTION auto_grant_func()
RETURNS event_trigger AS $$
BEGIN
GRANT CONNECT ON DATABASE postgres TO readonly;
GRANT USAGE ON SCHEMA schema1 TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA schema1 TO readonly;
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();
就我而言,问题是我无法选择其他角色创建的表。我能够创建和管理我的表,但无法管理其他角色创建的表。