未登录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.
相关产品推荐
相关产品推荐

