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