PostgreSQL,只读用户和PgAdmin

问题描述

有人可以帮助解决以下疑问吗?

我在Postgresql中有一个数据库,其中一些表是由管理员用户创建的。然后,我创建了一个视图以连接一些信息。我更喜欢使用PgAdmin与Postgresql一起使用,因为我不熟悉用于管理服务器的sql语法...现在:

  • 如何创建仅在连接到数据库服务器后才能看到此视图的用户

  • 如何在此视图中将该用户设置为只读用户

非常感谢您!

解决方法

首先,您需要在所有人的REVOKE USAGE模式上public并将其授予其他用户:

REVOKE USAGE,CREATE ON SCHEMA public FROM PUBLIC;
GRANT USAGE,CREATE ON SCHEMA public TO ddl_user;
GRANT USAGE  ON SCHEMA public TO write_user;

现在在新的架构中创建视图,并允许新用户仅访问该架构和视图:

CREATE SCHEMA viewschema;
CREATE ROLE only_view LOGIN;
GRANT USAGE ON SCHEMA viewschema TO only_view;
ALTER ROLE only_view SET search_path = viewschema;
CREATE VIEW viewschema.myview AS SELECT ...;
GRANT SELECT ON viewschema.myview TO only_view;