如何在PostgreSQL中创建只读用户?

时间:2012-06-26 08:14:52

标签: sql postgresql postgresql-9.1 postgresql-8.4 postgresql-9.0

我想在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访问权限,然后撤销敏感表上的select访问权限,然后用户可以使用该db用户运行自定义查询,而无需我清理输入。

特别是,他可能不会:

插入,删除,截断,删除表,删除数据库,创建表,创建函数/过程,查看/执行/创建/删除存储过程/函数。等。

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

1 个答案:

答案 0 :(得分:2)

  

为什么此用户可以访问information_schema

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

你应该可以这样做:

revoke all on all tables in schema information_schema from public;

您可能还需要撤消pg_catalog架构中视图/表的select权限。但我不确定这会破坏什么,例如psql或其他客户端工具无法访问该信息。