How to create a read-only user in PostgreSQL?
我想在PostgreSQL中创建一个只读用户。
目的是拥有一个可公开访问的数据资源管理器,用户可以在其中编写自定义SQL查询。
我这样做是为了创建用户:
1 2 3 4 5 6 | 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用户运行自定义查询,而无需我清理输入。
特别是,他可能不会:
insert,delete,truncate,drop table,drop database,create table,create function / procedure,see / execute / create / drop stored procedure / functions。 等等
Sooo - 现在我的问题:
为什么这个用户可以访问information_schema?
它没有被授予访问任何视图的权限,也没有被授予对架构information_schema的访问权限......
Why does this user have access to information_schema
我认为在information_schema上默认授予PUBLIC选择权限。
你应该能够做到:
1 | REVOKE ALL ON ALL TABLES IN schema information_schema FROM public; |
您可能还需要在pg_catalog架构中撤消视图/表的select权限。 但我不确定这会破坏什么,例如 psql或其他客户端工具无法访问该信息。