PostgreSQL:检查当前用户角色权限及行级策略配置问题
解决PostgreSQL行级策略与用户权限检查问题
1. 填充行级策略的USING子句
你需要将**?**替换为PostgreSQL内置的current_user函数,它会返回当前会话的有效用户名。注意原SQL语句缺少ON关键字指定表,需补充完整,同时要先开启表的行级安全(否则策略不会生效)。完整代码如下:
-- 开启student表的行级安全(必须步骤) ALTER TABLE student ENABLE ROW LEVEL SECURITY; CREATE POLICY student_rls_policy ON student FOR ALL TO role_manager USING (name = current_user);
如果需要匹配会话初始用户(即使切换过角色也保持不变),可以用session_user代替current_user。
2. 检查当前用户的角色与权限
查看当前用户拥有的角色
- 使用SQL语句查询:
SELECT rolname FROM pg_roles WHERE pg_has_role(current_user, rolname, 'member');
- 使用psql客户端元命令:
\du
查看当前会话的用户信息
SELECT current_user AS "当前有效用户", session_user AS "会话初始用户";
检查用户对特定表的权限
- 使用SQL语句查询:
SELECT privilege_type, table_name FROM information_schema.table_privileges WHERE grantee = current_user AND table_name = 'student';
- 使用psql客户端元命令:
\dp student
内容的提问来源于stack exchange,提问作者Raju Earelli
相关产品推荐
相关产品推荐

