如何限制用户查询information_schema?仅授登录权限仍可执行查询的问题
限制用户查询
information_schema.tables的方法 默认情况下,PostgreSQL的public角色对information_schema下的多数视图(包括tables)拥有SELECT权限,新创建的用户默认会继承public的权限——哪怕你只给了用户LOGIN权限、没配置其他成员身份,用户依然能通过继承的权限查询该视图。以下是具体解决步骤:
1. 撤销特定用户的查询权限
如果只想限制单个用户执行该查询,直接撤销该用户对information_schema.tables的SELECT权限:
REVOKE SELECT ON information_schema.tables FROM '你的用户名';
2. 全局撤销public角色的权限(影响所有普通用户)
如果要让所有无特殊权限的用户都无法查询该视图,可撤销public角色的对应权限:
REVOKE SELECT ON information_schema.tables FROM public;
注:超级用户不受此权限限制,依然能正常查询。
3. 创建用户时避免继承public权限
如果是新建用户,可在创建时指定NOINHERIT,让用户不继承public角色的任何权限:
CREATE USER 新用户名 WITH LOGIN NOINHERIT;
这样创建的用户默认只能登录,没有任何查询系统视图或普通表的权限。
验证权限是否生效
执行完上述操作后,用目标用户登录,再次执行SELECT * FROM information_schema."tables",应该会收到权限不足的报错。
内容的提问来源于stack exchange,提问作者Shahar Shokrani
相关产品推荐
相关产品推荐

