强化数据API安全性
您的数据库自动生成的 Data API 默认会公开 public
模式。如果您的 public
模式被其他工具作为默认空间使用,您可能需要锁定该模式。这有助于防止自动添加到 public
的数据被意外暴露。
Data API 的安全加固有两个级别:
- 完全禁用 Data API。如果您从不需要通过 Supabase 客户端库或 REST 和 GraphQL 端点访问数据库,建议采用此方式。
- 从 Data API 中移除
public
模式,替换为自定义模式(如api
)。
完全禁用 Data API
如果您从不打算使用 Supabase 客户端库或 REST 和 GraphQL 数据端点,可以完全禁用 Data API。例如,如果您仅通过服务器上的直接连接访问数据库,禁用 Data API 能提供最高级别的保护。
- 进入 Supabase 仪表板的 API 设置
- 在 Data API 设置 下,关闭 启用 Data API 开关
使用自定义模式替代 public
如果您希望在使用 Data API 的同时增强安全性,可以用自定义模式替代 public
模式。不使用常作为默认空间且权限设置较宽松的 public
模式,您可以更谨慎地控制公开的数据。
所有需要公开的数据、视图或函数都应被明确放入您的自定义模式(我们将称之为 api
),而不是默认出现在该模式中。
步骤 1:从公开模式中移除 public
- 进入 Supabase 仪表板的 API 设置
- 在 Data API 设置 下,从 公开模式 中移除
public
。同时从 额外搜索路径 中移除public
- 点击 保存
- 进入 数据库扩展 并禁用
pg_graphql
扩展
第二步:创建 api
模式并对外暴露
-
连接到您的数据库。您可以使用
psql
、Supabase SQL 编辑器或您选择的任何 Postgres 客户端。 -
创建一个名为
api
的新模式:1create schema if not exists api; -
授予
anon
和authenticated
角色对该模式的使用权限:1grant usage on schema api to anon, authenticated; -
前往 Supabase 仪表板的 API 设置。
-
在 数据 API 设置 下,将
api
添加到 暴露的模式 列表中。确保它是列表中的第一个模式,这样默认情况下会优先搜索该模式。 -
在这些新设置下,
anon
和authenticated
可以执行api
模式中定义的函数,但它们对任何表都没有自动权限。您可以基于表逐个授予权限。例如:12grant select on table api.<your_table> to anon;grant select, insert, update, delete on table api.<your_table> to authenticated;