You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用--auth后SurrealDB JWT认证遇IAM权限不足错误

解决SurrealDB启用--auth后JWT认证权限不足的问题

启用--auth和--deny-guests进入生产就绪模式后,JWT令牌访问数据返回403权限错误,但关闭--auth后正常——即使已给users表设置PERMISSIONS FULL,核心原因是生产模式下必须明确为认证主体(用户或令牌)绑定权限,表级的PERMISSIONS FULL无法直接绕过IAM的权限校验。以下是具体解决方案:

1. 为JWT关联的用户绑定权限

你的JWT中id字段对应users:test_user,直接给该用户授予users表的全权限:

GRANT ALL ON users TO users:test_user;

若需要精细控制权限,可指定具体操作:

GRANT SELECT, INSERT, UPDATE, DELETE ON users TO users:test_user;

2. 给令牌直接绑定权限

如果不需要关联用户,也可以在定义令牌时直接附加表权限:

DEFINE TOKEN user_tkn ON SCOPE account TYPE HS256 VALUE 'example123456'
  PERMISSIONS FULL ON users;

3. 为Scope设置默认权限(批量生效)

若account Scope下的所有认证用户都需要访问users表,可修改Scope定义添加默认权限:

DEFINE SCOPE account
  SESSION 24h
  -- 保留原有的SIGNIN逻辑(如果有)
  SIGNIN (SELECT * FROM users WHERE email = $email AND password = crypto::argon2::verify($password, password))
  -- 添加默认权限
  DEFAULT PERMISSIONS FOR SELECT, INSERT, UPDATE, DELETE ON users;

4. 验证JWT签名一致性

确保生成JWT时使用的HS256密钥与DEFINE TOKEN中的VALUE 'example123456'完全一致,包括大小写、特殊字符和空格,任何不一致都会导致权限校验失败。

5. 确认请求头与JWT声明无冲突

虽然请求中携带了NS、DB、SC头,但SurrealDB会优先使用JWT内的ns、db、sc声明,确保三者完全匹配,避免跨命名空间/数据库/Scope的权限问题。

完成上述配置后,重新启动SurrealDB(保持--auth --deny-guests参数),使用原JWT令牌发起请求即可正常访问数据。

内容的提问来源于stack exchange,提问作者nxfi777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:20:29