【问题标题】:How to connect to Couchbase 2.0+ using lcb_create C API?如何使用 lcb_create C API 连接到 Couchbase 2.0+?
【发布时间】:2014-07-08 21:56:13
【问题描述】:

我正在返回一个 C API Couchbase 2.0 项目,该项目在一年前工作,但现在无法连接到计算机上的数据库,我相信除了 Ubuntu 更新之外,源代码没有改变。

我现在尝试调用 lcb_create 时收到以下错误:

创建 libcouchbase 实例失败:管理帐户可以 不再用于数据访问

lcb_create 参数或行为是否发生了变化?我现在需要提供什么?

我的代码是:

  // Create the database instance:
  lcb_error_t err;

  struct lcb_create_st create_options;
  struct lcb_create_io_ops_st io_opts;
  io_opts.version = 0;
  io_opts.v.v0.type = LCB_IO_OPS_DEFAULT;
  io_opts.v.v0.cookie = NULL;
  memset(&create_options, 0, sizeof(create_options));
  err = lcb_create_io_ops(&create_options.v.v0.io, &io_opts);
  if (err != LCB_SUCCESS) {
    fprintf(stderr, "Failed to create libcouchbase IO instance: %s\n",
    lcb_strerror(NULL, err));
    return 1;
  }

  create_options.v.v0.host = Host;
  create_options.v.v0.user = Username;
  create_options.v.v0.passwd = Password;
  create_options.v.v0.bucket = Bucket;

  err = lcb_create(&Instance, &create_options);
  if (err != LCB_SUCCESS) {
    fprintf(stderr, "Failed to create libcouchbase instance: %s\n",
    lcb_strerror(NULL, err));
    return 1;
  }

我传递的用户名一直是管理员名称,正如我所说,这曾经有效。仔细阅读,听起来现在我们使用存储桶名称作为用户名?那么bucket字段是多余的吗?密码现在是存储桶密码?我没有看到可以设置它的地方 - 也许我需要将 Couchbase Server 更新到 2.0 以上版本,而这些更新导致我的 API 与服务器不同步?

【问题讨论】:

    标签: c authorization couchbase


    【解决方案1】:

    您应该使用存储桶名称和密码来连接存储桶,而不是管理员名称。 Couchbase C client 2.1.1 的发行说明中对此进行了介绍。

    从未记录过管理员凭据的使用,这不是一种良好的安全做法,而且很少使用,因此 Couchbase 决定解决该问题。

    【讨论】:

    • 谢谢!顺便说一句,这确实有效。我只需要用存储桶名称替换用户名,并将密码设置为空字符串。
    猜你喜欢
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多