3

我想在 PostgreSQL 中创建一个只读用户。

目的是拥有一个可公开访问的数据浏览器,用户可以在其中编写自定义 SQL 查询。

我这样做是为了创建用户:

CREATE USER MyReadOnlyUser WITH ENCRYPTED PASSWORD 'MY_WEAK_PASSWORD';

GRANT ALL PRIVILEGES ON DATABASE "MY_DB_NAME" to MyReadOnlyUser;

GRANT ALL ON SCHEMA public TO MyReadOnlyUser; 
GRANT SELECT ON ALL TABLES IN SCHEMA public TO MyReadOnlyUser; 

目的是为用户提供对所有表的 SELECT 访问权限,然后撤销对敏感表的选择访问权限,然后用户可以使用该 db 用户运行自定义查询,而无需我清理输入。

特别是,他可能不会:

插入、删除、截断、删除表、删除数据库、创建表、创建函数/过程,请参阅/执行/创建/删除存储过程/函数。等等

Sooo - 现在我的问题是:
为什么这个用户可以访问 information_schema ?
它没有被授予访问任何视图的权限,也没有被授予模式 information_schema 的访问权限......

4

1 回答 1

2

为什么这个用户可以访问 information_schema

我认为在 information_schema 上默认授予 PUBLIC 选择权限。

你应该能够做到:

revoke all on all tables in schema information_schema from public;

您可能还需要撤销对 pg_catalog 模式中的视图/表的选择权限。但我不确定如果 psql 或其他客户端工具无法访问该信息,这会破坏什么。

于 2012-06-26T08:28:05.400 回答