Postgrest API调用部分表提示权限拒绝问题排查求助
Postgrest API 部分表权限拒绝排查方案
检查默认行级安全与基础权限
Postgrest默认会开启行级安全(RLS),哪怕你没手动加新策略,只要RLS开启且无任何策略,就会默认拒绝所有访问。先查目标表的RLS状态和public角色权限:-- 查看目标表的RLS是否开启 SELECT relname, rowsecurity FROM pg_class WHERE relname = '你的表名'; -- 查看public角色对该表的操作权限 SELECT table_name, privilege_type FROM information_schema.table_privileges WHERE grantee = 'public' AND table_name = '你的表名';如果RLS是开启状态且无策略,要么关闭RLS(不推荐),要么给表添加基础访问策略。
验证Postgrest连接角色的权限
确认Postgrest配置里的db-role角色是否拥有目标表的对应操作权限(比如SELECT、INSERT):-- 替换为你的Postgrest角色名和表名 SELECT has_table_privilege('postgrest_role', '你的表名', 'select');返回
f就说明权限不足,执行授权:GRANT SELECT ON TABLE 你的表名 TO postgrest_role;检查Schema访问权限
有时候表权限没问题,但角色没权限访问表所在的Schema:SELECT has_schema_privilege('postgrest_role', '你的schema名', 'usage');返回
f的话补授权:GRANT USAGE ON SCHEMA 你的schema名 TO postgrest_role;排查隐式策略或继承关系
看看目标表是否继承了其他带策略的表,或者所在Schema有全局策略:-- 检查表的继承关系 SELECT inhrelid::regclass, inhparent::regclass FROM pg_inherits WHERE inhrelid = '你的表名'::regclass; -- 查看Schema下所有策略 SELECT * FROM pg_policies WHERE schemaname = '你的schema名';核对API请求方法对应的权限
比如GET对应SELECT,POST对应INSERT,PUT对应UPDATE,确保你调用API用的方法,Postgrest角色都有对应的数据库权限。
内容的提问来源于stack exchange,提问作者friendlywhales
相关产品推荐
相关产品推荐

