更新时间:2026-10-21 GMT+08:00
分享

准备工作

华为云RDS Supabase提供数据库、用户认证、文件存储、实时订阅四项开箱即用的能力,可作为系统或应用的后端底座直接接入,无需自建后端服务。使用前需先完成对接准备,方便客户快速、高效、安全地通过API或SDK调用平台服务化能力。

步骤一:获取访问地址

RDS Supabase应用服务端口固定为8443,所有SDK与REST API请求均经此端口访问。依据客户端所处网络环境,访问途径分以下三类,地址有所不同。

表1 访问方式与访问地址

访问方式

适用场景

访问地址

内网访问

客户端与应用同VPC、同子网且网络互通

http(s)://{应用内网IP}:8443

公网访问(DNAT网关方式)

多实例共享公网IP、需端口映射

http(s)://{DNAT公网IP}:{公网端口号}

公网访问(EIP方式)

为应用绑定独立公网IP

http(s)://{弹性公网EIP}:8443

  • 内网访问

    直接使用应用内网IP,适合与Supabase应用同VPC、同子网且网络互通的客户端。

    • 应用创建时自动分配IPv4内网地址,创建后不可修改。
    • 客户端需与应用内网地址网络可达,建议同VPC同子网。
  • 公网访问(DNAT网关方式)

    通过公网NAT网关与DNAT规则,将公网IP指定端口映射至应用内网8443端口,适用于多实例共享同一公网IP、需端口映射的场景。

    • 需先购买公网NAT网关与弹性公网IP,绑定至应用所在VPC与子网,并在DNAT规则中关联应用内网地址。
    • 对外公网端口号由DNAT规则决定,可与8443不同。
    • NAT网关与弹性公网IP单独计费。
    • 绑定与解绑操作,详见绑定和解绑DNAT网关地址。
    • 不支持邮箱认证与GitHub认证场景,详见用户认证Auth配置管理。
  • 公网访问(EIP方式)

    为应用直接绑定一个弹性公网EIP,客户端经该EIP加8443端口访问,适用于需独立公网入口、无需端口映射的场景。

  • 安全组配置

    无论哪种公网访问方式,都须确保应用所属安全组在入方向放通8443端口的TCP规则,否则公网请求被拦截。

    • 每个应用仅支持配置一个安全组,请合理规划规则。
    • 安全组创建与规则管理,详见管理应用安全组。
  • SSL与HTTPS

    SSL为可选项,默认不启用。如需以HTTPS(https://)访问:

    • SSL证书由华为云CCM服务提供,需单独购买。
    • 在应用详情页「网络信息」开启SSL并选择证书后,地址前缀由http://切换为https://。
    • SSL开启与关闭操作,详见开启或关闭SSL。

若弹性公网EIP已用于邮箱认证、GitHub认证回调或邮件模板引用等用户认证场景,请勿直接解绑该EIP;需先在用户认证配置中关闭相关功能、确认地址不再被引用后再解绑,否则将导致认证回调地址失效、业务中断,详见用户认证Auth配置管理。

步骤二:获取API Key

参考查看API Key,获取API Key密钥。华为云RDS Supabase提供四种API Key,按使用场景进行选取。

表2 API Key类型与用途

Key类型

前缀

权限

使用场景

浏览器安全

Publishable Key

sb_publishable_xxx

低权限(受RLS约束)

客户端JS SDK、REST API

✅ 可安全出现在下发到客户端的源码中(受RLS约束,泄露也无法越权)

Secret Key

sb_secret_xxx

高权限(BYPASSRLS)

服务端JS SDK(Node.js)

❌ 浏览器使用返回401,仅限服务端

Anon Key

JWT格式

低权限

Publishable Key的旧版形式

✅

Service Role Key

JWT格式

高权限(BYPASSRLS)

Secret Key的旧版形式

❌ 仅限服务端

对接只需两把:客户端(浏览器、移动端)用Publishable Key,服务端(Node.js)用Secret Key。Anon Key与Service Role Key为旧版形式,功能分别与Publishable Key、Secret Key等价,旧项目可继续使用。

RLS(行级安全)指数据库逐行控制访问的机制,决定一把Key最终能读写哪些行;BYPASSRLS指绕过该行级控制、拥有完整数据权限。更多详细信息,请参见后续操作。

安全提示:Secret Key与Service Role Key拥有绕过RLS的高权限,仅限服务端使用,严禁写入前端代码或暴露到浏览器。Key与数据库角色的对应关系见后续操作。

步骤三:功能对接

以JavaScript前端语言为例,SDK方式通过@supabase/supabase-js封装调用,鉴权与请求细节由SDK自动处理,适合大多数场景。其他语言可参考Supabase开源文档。

SDK初始化

安装SDK依赖包:

npm install @supabase/supabase-js 

创建Supabase客户端对象:

// {Supabase应用访问地址}与{Supabase应用API Key}为占位符,分别从步骤一:获取访问地址和步骤二:获取API Key获取并替换为实际值。
import { createClient } from '@supabase/supabase-js' 
const supabaseUrl = "{Supabase应用访问地址}"
const supabaseApiKey = "{Supabase应用API Key}" 
export const supabase = createClient(supabaseUrl, supabaseApiKey) 

SDK调用

以下示例均对商品products表读写,该表需先在数据库章节建好并配置GRANT权限与RLS策略,否则查询返回空、写入被拒绝。

客户端JS SDK(浏览器)

适用于浏览器、移动端等运行在用户设备上的客户端。代码随应用下发、密钥可被提取,故API Key填浏览器安全的Publishable Key(sb_publishable_xxx);其受RLS约束,仅可操作策略放行的行,即便泄露也无法越权。查询等操作通过初始化的supabase实例发起:

const { data } = await supabase.from('products').select('*') 

该实例初始化一次、全局复用,Publishable Key可安全写入客户端源码。浏览器侧跨域访问受CORS约束,若前端域名与Supabase访问地址不同源会被拦截,请确认实例已放行前端域名。

服务端JS SDK(Node.js)

适用于服务器、云函数、Serverless等受信后端,密钥不出服务器、不向用户暴露。此类场景常需数据迁移、批量处理等高权限操作,故API Key填仅限服务端的Secret Key(sb_secret_xxx),其带BYPASSRLS、拥有完整数据访问权限,严禁下发到客户端。查询等操作通过初始化的supabase实例发起:

const { data } = await supabase.from('products').select('*') 

旧版Service Role Key(JWT格式)功能与Secret Key等价,用法相同。实例同样初始化一次后复用,适用于后台任务、定时同步等不受行级约束的写操作,切勿用于响应终端用户的接口。

API方式以HTTP直接调用Data API,不引入SDK,适合不方便引入依赖的环境。两种方式访问同一套Data API,能力等价。

REST API(fetch)

适用于不引入SDK、直接以HTTP调用Data API的场景。此时SDK自动附加Key的行为需手动完成——请求头携带apikey和Authorization:

const res = await fetch('{Supabase应用访问地址}/rest/v1/products', {
  headers: {
    apikey: 'sb_publishable_xxxx_xx',
    Authorization: 'Bearer sb_publishable_xxxx_xx'
  }
})
const data = await res.json()

注意:apikey和Authorization必须同时提供,缺一不可。URL按{Supabase应用访问地址}/rest/v1/{表名}拼接,返回JSON,接口参数遵循PostgREST约定。响应状态码非2xx通常意味着Key无效或RLS未放行,建议检查res.ok并据状态码排查。

后续操作

完成对接后,客户端对数据的访问受行级安全(Row Level Security,RLS)约束。RLS决定一把Key、一个登录状态最终能读写哪些行,是数据隔离的核心机制。本小节帮助理解API Key与访问结果的对应关系。关于RLS策略配置见数据库API(Database Data API)。

  • RLS行级安全

    RLS由两层防护构成,缺一不可。

    表3 RLS两层防护机制

    层级

    机制

    作用

    类比

    第一层

    GRANT权限

    表级门控,决定角色能否SELECT、INSERT、UPDATE或DELETE。

    房间门禁

    第二层

    RLS策略

    行级过滤,决定哪些行可被哪些角色看到。

    门禁内可打开的抽屉

    • 仅启用RLS而不GRANT:角色无权访问表,RLS策略形同虚设。
    • 仅GRANT而不设RLS策略:所有行对授权角色可见,等于没有行级保护。
  • Key与角色映射

    API Key本身不直接读写数据,实际操作由其映射的数据库角色执行。角色由Key类型与登录状态共同决定,下表列出对应关系。

    表4 Key与角色映射

    Key + 认证状态

    映射角色

    说明

    Publishable Key + 未登录

    anon

    匿名访问,仅可操作RLS策略允许的行。

    Publishable Key + 已登录

    authenticated

    已认证访问,受RLS策略约束。

    Secret Key / Service Role Key

    BYPASSRLS

    绕过所有行级安全策略,拥有完整数据访问权限。

参考文档

以下为Supabase开源相关文档,仅供参考。

相关文档