You need to enable JavaScript to run this app.
文档中心
AI 原生 BaaS 平台 Supabase 版

AI 原生 BaaS 平台 Supabase 版

复制全文
下载 pdf
使用 Authentication
启用行级安全(RLS)
复制全文
下载 pdf
启用行级安全(RLS)
行级安全(Row Level Security,RLS)是 PostgreSQL 提供的数据访问控制机制。启用 RLS 后,您可以通过编写策略(Policy)控制不同用户对表中数据行的访问权限,实现行级别的数据隔离。​
在 AI 原生 BaaS 平台 Supabase 版中,建议对所有包含用户数据的表启用 RLS。启用 RLS 后,如果未创建任何策略,通过 Supabase API 查询该表将返回空结果,从而确保数据默认不可访问。​
前提条件​
  • 已创建使用 Supabase 引擎的 Workspace 且 Workspace 的状态为运行中。关于创建 Workspace 的更多详细信息,请参见创建 Workspace。​
  • 已通过目标 Workspace 成功登录 Supabase 控制台。关于登录控制台的详细信息,请参见登录 Supabase 控制台。​
操作步骤​
您可以通过以下两种方式开启 RLS。​
方式一:创建表时开启 RLS​
  1. 登录 Supabase 控制台,进入目标项目。​
  1. 在左侧导航栏中选择 Table Editor。​
  1. 点击 New table,在弹出的对话框中填写表名和描述等信息。​
  1. 勾选 Enable Row Level Security (RLS) 复选框(标记为 Recommended)。​
  1. 点击 Save 保存表。​
说明​
创建表时仅完成 RLS 的开启。保存表后,您需要前往 Authentication > Policies 页面创建访问策略,否则通过 API 查询该表将返回空结果。​
方式二:在 Policies 页面开启 RLS​
对于已存在但未开启 RLS 的表,您可以在 Policies 页面统一开启。​
  1. 在左侧导航栏中选择 Authentication。​
  1. 在 CONFIGURATION 区域下选择 Policies。​
  1. 在表列表中找到目标表。未开启 RLS 的表会显示 RLS Disabled 标签。​
  1. 点击该表对应的 Enable RLS 按钮。​
  • 开启成功后,按钮将变为 Disable RLS,您可以随时通过该按钮关闭 RLS。​
使用说明​
创建访问策略​
开启 RLS 后,您需要为表创建策略,用户才能正常访问数据。​
  1. 进入 Authentication > Policies 页面。​
  1. 找到已开启 RLS 的目标表,点击 Create policy。​
  1. 根据业务需求配置策略名称、目标角色和 USING 表达式。对于 INSERT 和 UPDATE 操作,还需配置 WITH CHECK 表达式。​
  1. 保存策略后,符合条件的用户即可通过 API 访问对应的数据行。​
Create Policy 弹窗字段说明​
在 Create a new Row Level Security policy 弹窗中,左侧为策略表单,右侧为常用策略模板(Templates)。各字段说明如下。​
左侧表单字段​
  • Policy Name:策略名称,自定义填写。​
  • Table(on clause):应用此策略的目标表,格式为 schema.tableName,例如 public.xinli。​
  • Policy Behavior(as clause):策略行为类型,通过下拉框选择。​
  • Permissive:只要有一条 Permissive 策略匹配,即允许访问(OR 逻辑)。​
  • Restrictive:所有 Restrictive 策略必须全部满足,才允许访问(AND 逻辑)。​
  • Policy Command(for clause):策略适用的操作类型,单选,可选值为 SELECT、INSERT、UPDATE、DELETE、ALL。​
  • Target Roles(to clause):策略应用的角色,默认应用于所有(public)角色,也可指定特定角色。​
表单下方为 SQL 编辑区,展示根据以上字段自动生成的策略 SQL 预览,您可直接在此编辑 USING 和 WITH CHECK 表达式。​
右侧模板列表(Templates)​
弹窗右侧提供以下常用策略模板,单击模板名称即可快速将其配置填入左侧表单。​
​
操作类型​
模板名称​
说明​
SELECT​
Enable read access for all users​
允许所有用户通过 SELECT 操作读取表数据。​
INSERT​
Enable insert for authenticated users only​
仅允许已登录用户插入数据。​
DELETE​
Enable delete for users based on user_id​
允许用户删除 user_id 列与其 ID 匹配的行。​
INSERT​
Enable insert for users based on user_id​
允许用户插入 user_id 列与其 ID 匹配的行。​
UPDATE​
Policy with table joins​
使用跨表查询构建更复杂的 RLS 规则,适用于关联表场景。​
ALL​
Policy with security definer functions​
结合 Security Definer 函数实现多对多关系中链接表的访问控制。​
SELECT​
Policy to implement Time To Live (TTL)​
仅允许查询 24 小时内创建的行,实现类 TTL 效果。​
SELECT​
Enable users to view their own data only​
限制用户只能查询属于自己的数据。​
​
查看 RLS 状态​
在 Authentication > Policies 页面,您可以查看当前 schema 下所有表的 RLS 状态:​
  • RLS Disabled:表未开启 RLS,所有拥有表级权限的用户均可访问全部数据。​
  • 已开启:表已开启 RLS,数据访问受策略控制。若尚未创建任何策略,页面会显示警告信息,提示通过 API 将无法查询到数据。​
您还可以通过页面顶部的 schema 下拉菜单切换不同的 schema,或使用搜索框快速筛选表和策略。​
关闭 RLS​
如需关闭某张表的 RLS,在 Policies 页面找到该表,点击 Disable RLS 即可。关闭后,该表的数据访问将不再受行级策略限制。​
注意事项​
  • 默认拒绝:开启 RLS 后,在未创建任何策略的情况下,通过 Supabase API(使用 anon key 或用户 JWT)查询表将返回空数组。请在开启 RLS 后及时创建策略。​
  • service_role 不受限:使用 service_role key 发起的请求会绕过 RLS,拥有完整的数据库访问权限。请勿将 service_role key 暴露到前端代码或浏览器环境中。​
  • 策略与表权限:RLS 策略在表级 GRANT 权限之上生效。即使用户拥有表级 SELECT 权限,如果没有匹配的 RLS 策略,仍然无法查询到数据。​
  • 多表查询:执行包含 JOIN 的查询时,涉及的每张开启了 RLS 的表都会独立应用各自的策略。​
  • 关闭 RLS 的风险:关闭 RLS 后,所有拥有表级权限的用户均可访问表中全部数据,请谨慎操作。​
最近更新时间:2026.08.25 12:34:59
这个页面对您有帮助吗?
有用
有用
无用
无用