未经身份验证无法创建存储桶

Can't create bucket without authentication

出于测试目的,我们将 Couchbase 从 4.6 社区版更新到 5.0.0-2873 企业版,我们使用 java-客户端的软件在尝试打开存储桶时开始抛出 InvalidPasswordException。

正如我所发现的,每个新创建的存储桶都有 authType='sasl' 和随机生成的 saslPassword。 我尝试使用 CLI 而不是 GUI 创建存储桶:

couchbase-cli bucket-create -c localhost:8091 -u Administrator -p password --bucket=general --bucket-ramsize=1300 --bucket-type=couchbase --bucket-password=

我收到以下错误:

ERROR: unrecognized arguments: --bucket-password=password

我也尝试了 bucket-edit 功能,结果相同。

根据 documentation 论点应该是有效的。

我还尝试使用 REST API 更改存储桶身份验证(以及类似的密码),但即使这没有引发任何错误,authType 和密码仍然保持不变。

curl -X POST -u Administrator:password -d 'authType=none' http://<host>:8091/pools/default/buckets/general

同样,根据 documentation 这应该可行。

如果我查询存储桶信息以获取 sasl 密码并为 openBucket 函数提供该信息,则连接有效,但我们真的不想在我们的系统中使用此功能。

那么,还有其他关于如何在我们的 5.0EE Couchbase 设置中删除存储桶身份验证的想法吗?

在 Couchbase 5.0 中,我们不再支持存储桶密码,并在连接到存储桶时转为使用基于角色的访问控制。这意味着在 5.0 中,连接到存储桶的标准(预生产)方式是使用您在设置集群时创建的管理员用户和密码。如果您不确定管理员用户是什么,它是您在第一次通过 Couchbase 设置向导时创建的用户,或者它是您在 运行 couchbase 时在命令行上指定的用户名和密码- cli cluster-init 命令。

需要注意的一件事是,使用管理员 user/password 是标准的预制作工作流程。我建议当您投入生产时,为您的应用程序创建单独的用户,这些用户只能访问他们需要在集群中访问的集群资源。为此,您可以转到管理控制台中的“用户”选项卡并创建一个新用户,并为他们授予“完整存储桶访问权限”角色,这是应用程序应具有的标准角色。

您现在可能会对自己说,这一切听起来不错,但是当我使用 Administrator user/password 时,我仍然遇到问题。如果是这种情况,原因是您拥有 Couchbase 5.0,但您的 SDK 不够新,无法处理 5.0 中新的 RBAC 身份验证机制。解决方法是在“用户”选项卡中创建一个与存储桶同名的用户,并为该用户授予“完全存储桶访问权限”角色。然后您可以使用此用户进行身份验证。

最后一件事要提到的是,在从 5.0 之前的集群升级到 5.0 集群的过程中,Couchbase 会自动为每个存储桶创建一个用户。每个用户将与其中一个存储桶具有相同的名称,并且该用户的密码将对应于存储桶密码。这样做主要是为了确保在升级期间没有应用程序停机。升级集群后,下一步应该是升级 Couchbase 客户端库以使其开始使用 RBAC 身份验证。

如果您需要使用旧方法并且没有密码,您可以将 cochbase-cli 与 --rbac-username 和 --rbac-password "" 一起使用,但您需要将密码指定为"",例如

./couchbase-cli user-manage -c localhost:8091 -u Admin -p password --set --rbac-username <UserForBucket> --roles bucket_full_access[<BucketName>] --rbac-password "" --auth-domain local