我正在使用Redshift(基于PostgreSQL)并且需要创建一个仅限于特定数据库模式的用户。它们还需要被锁定在系统视图之外。我在数据库集群上运行了以下命令:
revoke create on schema information_schema from public
revoke usage on schema information_schema from public
revoke create on schema pg_catalog from public
revoke usage on schema pg_catalog from public
revoke create on schema public from public
revoke usage on schema public from public
接下来,我创建一个用户并以该用户身份运行:
SET SESSION AUTHORIZATION someUser
然后我尝试访问一些系统视图:
select * from information_schema.tables
执行SQL命令时发生错误:
的权限被拒绝
select * from information_schema.tables
错误:架构information_schema [SQL State = 42501]
select * from pg_catalog.pg_user
执行SQL命令时发生错误:
的权限被拒绝
select * from pg_catalog.pg_user
错误:模式pg_catalog [SQL状态= 42501]
到目前为止一切都很好 - 用户无法在系统视图中浏览。
但出于某种原因,当我运行以下内容时,它会成功:
select * from pg_user
换句话说,如果用户在没有指定pg_catalog架构的情况下尝试查询pg_user,他们就能够看到系统中的用户。
关于如何防止这种情况的任何想法?