Home About Contact
CouchDB

CouchDB 3.3 ユーザー追加手順の備忘録

久しぶりに CouchDB を使ったらユーザーが追加できなかった。 過去の自分用メモを元にセットアップしたのだが、 ユーザー追加部分でつまずいた。なぜかうまくいかない。

結論としては、このページ https://docs.couchdb.org/en/latest/setup/single-node.html に書いてあることを理解すればよい。

CouchDB は一台で運用(Single Node)か複数で運用(A Cluster)をセットアップ時に選ぶのだが、 Single Node を選択したときに _users データベースが用意されなくなったらしい。 Single Node で使う人は admin なしか、admin だけで運用するのが普通でしょ、という感じなのかもしれない。

なので、CouchDB のユーザーを追加する前にこの _users データベースを手動で追加してやれば問題ない。 以下、大まかなセットアップとセットアップ後に foo ユーザーを追加して、 mydb という名前のデータベースを作成して、そこに foo ユーザーを割り当てるところまでを書く。

CouchDB のインストール

このドキュメント https://docs.couchdb.org/en/stable/install/unix.html に従う。

インストール中にいくつかの質問に答える必要がある。

サーバタイプは standalone を選択。次に Magic Cookie を入れろと言われるが、 これはクラスタ構成で使うときに使うものらしいので、適当な文字列を入れた。 そして、IP address は 127.0.0.1 を使う。 最後に admin パスワードを入れる。 ここでは説明上 adminpassadmin のパスワードとして設定したとして以下説明を続ける。

作動確認

以下のコマンドを使って CouchDB を起動,ステータス確認,停止させることができる。

$ sudo systemctl start couchdb
$ sudo systemctl status couchdb
$ sudo systemctl stop couchdb

curl を使って、起動しているかを確認することもできる。

$ curl http://admin:adminpass@127.0.0.1:5984/_up

起動していれば以下のようなメッセージが標準出力される。

{”status":"ok","seeds":{}}

データベースを追加

mydb という名前のデータベースを追加しよう。

$ curl -X PUT http://admin:adminpass@127.0.0.1:5984/mydb
{"ok":true}

セキュリティチェックして、どのユーザーがこのデータベースを使えるか確認する。

$ curl -X GET http://admin:adminpass@127.0.0.1:5984/mydb/_security
{"members":{"roles":["_admin"]},"admins":{"roles":["_admin"]}}

今は admin しか存在しないから当然と言えば当然だが、admin のみがこのデータベースを使える設定になっている。

ユーザーを追加

事前準備として Single Node としてセットアップした CouchDB 3.3 は _users データベースが存在していないから、 まずはそれをつくる。

$ curl -X PUT http://admin:adminpass@127.0.0.1:5984/_users
{"ok":true}

その上で、以下の user.json ファイルを作成。

{
  "docs": [
    {
      "_id": "org.couchdb.user:foo",
      "name": "foo",
      "password": "hogehoge",
      "roles": [],
      "type": "user"
    }
  ]
}

foo という名前でパスワードが hogehoge のユーザです。

そして、この user.json を使ってユーザを追加。

$ curl -X POST -H "Content-Type:application/json" -d @user.json http://admin:adminpass@127.0.0.1:5984/_users/_bulk_docs
[{"ok":true,"id":"org.couchdb.user:foo","rev":"1-b888de54be0845cb2d297b1af63dcf8e"}]

続いて、mydbfoo ユーザのアクセス件を与える。

そのために、security.json を作成。

{
  "members": {
    "roles": [
      "_admin"
    ]
  },
  "admins": {
    "roles": [
      "_admin"
    ],
    "names": [
      "foo"
    ]
  }
}

ここでは admins.namesfoo ユーザを追加している。

これを mydb のセキュリティとして登録。

$ curl -X PUT -H "Content-Type:application/json" -d @security.json http://admin:adminpass@127.0.0.1:5984/mydb/_security
{"ok":true}

以上です。