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

未登录SurrealDB Scope时无法查询数据的技术求助

问题原因与解决方法

原因

SurrealDB的权限体系要求所有数据库操作必须在已认证的会话中执行(除非启动时显式开启匿名访问)。虽然你通过db.use()切换了命名空间和数据库,但未调用signin/signup的匿名会话,默认没有访问任何命名空间、数据库的权限——哪怕你给表设置了FOR select WHERE true的权限,也会因为会话没有上层资源的访问权限,导致查询返回空结果。

解决方法

有两种可行的解决方式:

1. 执行用户认证

在调用db.use()之前,先用合法账号完成认证。比如使用默认的root账号(如果没修改过初始密码):

import Surreal from 'surrealdb.js';

const db = new Surreal('http://127.0.0.1:8000/rpc');

// 先完成认证
await db.signin({
  user: 'root',
  pass: 'root',
});

await db.use("test", "test");
console.log(await db.query("SELECT * FROM school"));

生产环境建议创建专用低权限用户,避免直接使用root账号。

2. 启动SurrealDB时允许匿名访问

如果是开发测试场景,可在启动SurrealDB服务时添加--allow-anonymous参数,放开匿名会话的访问权限:

surreal start --allow-anonymous --user root --pass root file://./db

启动后未认证的会话就能正常执行查询了。

内容的提问来源于stack exchange,提问作者Tristan F.-R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:30:55