REST:检索用户可以访问的所有数据库的列表(不一致?)

REST: Retrieving a list of all databases a user can access (inconsistency?)

文档指出用户可以访问的所有数据库的列表可以使用以下方法检索:http://localhost:8529/_api/database/user。 但是,当我尝试时,这给了我一个 401。

此外,图形界面中的 Swagger 文档,当我单击 'Try it out' 时,它使用以下 URL:http://localhost:8529/_db/test_db_2/_api/database/user

我觉得很奇怪,因为它包含数据库的名称:test_db_2

有没有办法在不知道用户姓名的情况下查询用户可以访问的所有数据库?

我想我们这里有几件事。

首先:ArangoDB 3.0 默认启用身份验证。这意味着您必须为任何 http 请求提供身份验证 headers。如果您在浏览器中或通过 curl 打开 URL,这很可能会失败。使用 curl 时,您可以传递 --user 参数来指定 username/password。如果您省略身份验证,服务器将始终发送 401 http 响应。

现在到您的用例:可以通过以下方式获取每个用户允许的数据库:

curl -v --user root:8bYikSrSC2ue5zlw 172.17.0.2:8529/_api/user/testuser/database

这是我机器上 运行 docker 实例的完整示例。将 testuser 替换为您想要的用户,替换 host/port 和 username/password。请注意,“/database”是静态的。通过提供这个,你告诉 ArangoDB 提供用户有权访问的数据库列表。结果示例:

{"result":{"test":"rw","test2":"rw"},"error":false,"code":200}

最后,ArangoDB 在每个数据库级别上提供了 REST API。通过指定 /_db/test_db_2,您将访问数据库 test_db_2 中的 REST API。在不指定数据库(直接访问 /_api/something)的情况下,您隐含地要求 ArangoDB 在内部 _system 数据库中运行。您可能在登录 ArangoDB 时选择了数据库 test_db_2,因此 UI 中的 API 链接指向该数据库。

/user API 有点特殊,因为用户是全球性的,因此您指定哪个数据库并不重要。