我正在使用java客户端的1.4.3版本,并且我正在尝试连接到我在本地运行的Couchbase服务器,但是我收到了auth错误。在查看了他们的客户端库如何在他们的类中使用变量之后的代码(不是开源很棒?)我得出的结论是,如果我想能够连接到我拥有的“桶”使用与该存储桶相同的用户名为每个“存储桶”创建用户。这对我来说毫无意义。我错了。不是吗?必须有另一种方式。那是什么意思?
作为参考,这里是我用来创建连接的东西(它是Scala但在Java中看起来几乎相同):
val cf = new CouchbaseConnectionFactoryBuilder()
.setViewTimeout(opTimeout)
.setViewWorkerSize(workerSize)
.setViewConnsPerNode(conPerNode)
.buildCouchbaseConnection(nodes, bucket, password)
new CouchbaseClient(cf)
直接来自他们的examples。
他们的代码
如果我查看他们连接到“视图”本身的代码,我会看到以下内容:
public ViewConnection createViewConnection(
List<InetSocketAddress> addrs) throws IOException {
return new ViewConnection(this, addrs, bucket, pass);
}
然后传递给constructor:
public ViewConnection(final CouchbaseConnectionFactory cf,
final List<InetSocketAddress> seedAddrs, final String user,
final String password) //more code...
并且user
变量实际上在HTTP Basic Auth中用于形成Authentication头。当然,user
变量等同于CouchbaseConnectionFactory中的bucket
变量。
答案 0 :(得分:1)
您是对的 - 每个存储桶都应使用存储桶名称作为用户进行身份验证。但是,没有任何用户可以创建&#39; - 您只是使用在群集UI上创建存储桶时设置的任何(存储桶)名称和密码。
请注意,人们通常每个应用程序使用一个存储桶(不要认为存储桶==表,想想存储桶==数据库),因此对于大多数应用程序而言,通常不需要多个存储桶。