Gant select 关于 Postgres 中的架构

Gant select on schema in Postgres

如何在 PostgreSQL 中将 select 授予模式中的所有项目?

我正在尝试在我的 PostgreSQL 数据库中创建一个 read-only 用户。我所有的表和视图都位于 schema1 内。有时,在 schema1 中添加了新视图,但只读用户没有对新创建的视图的读取权限。

有没有办法对架构中的所有项目授予 select,以便用户也可以读取任何新创建的架构?

我当前的代码是:

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;

我知道我也可以添加一行来授予 select 模式中的视图,但我正在寻找一种在添加新视图时也能工作的解决方案。

使用事件触发器,您可以处理:

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();
ALTER DEFAULT PRIVILEGES IN SCHEMA schema1 GRANT SELECT ON TABLES TO readonly;