在 Postgres 中授予对架构的选择

问题描述 投票:0回答:3

如何将 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;

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

postgresql permissions
3个回答
4
投票
ALTER DEFAULT PRIVILEGES IN SCHEMA schema1 GRANT SELECT ON TABLES TO readonly;

2
投票

使用事件触发器,您可以处理这个问题:

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();

0
投票

就我而言,问题是我无法选择其他角色创建的表。我能够创建和管理我的表,但无法管理其他角色创建的表。

© www.soinside.com 2019 - 2024. All rights reserved.