ラベル MongoDB の投稿を表示しています。 すべての投稿を表示
ラベル MongoDB の投稿を表示しています。 すべての投稿を表示

MongoDBで認証エラーが出る件

※ユーザ設定はadmin含め、各データベース毎に行う必要があるらしい。
 またadminはユーザ一覧表示などはできるが、データの読み書きができない仕様らしい。

$ mongo
MongoDB shell version v3.4.10
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.10
> show dbs;
2018-01-29T20:16:13.396+0900 E QUERY    [thread1] Error: listDatabases failed:{
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
        "code" : 13,
        "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:781:19
shellHelper@src/mongo/shell/utils.js:671:15
@(shellhelp2):1:1
>

さて、どうしたものか。。。。
これはユーザ認証に問題があるらしい。
そもそもユーザが登録されていないので、まず特権ユーザを1つ作ってみる。

> use admin
switched to db admin
>  db.createUser(
...   {
...     user: "hogehoge",
...     pwd: "password",
...     roles:
...     [
...       {
...         role: "userAdminAnyDatabase",
...         db: "admin"
...       }
...     ]
...   }
... )
Successfully added user: {
        "user" : "hogehoge",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}
>

これでadminユーザを追加することができた。
では追加したユーザがちゃんと認証されているかテストしてみる。

> db.auth("hogehoge","password")
1

1と表示されたら認証成功。0が表示されたら認証失敗だ。

あらためてデータベースを確認してみる。

> show dbs
admin  0.078GB
local  0.078GB

ちゃんと表示されたので認証は成功しているようだ。

ユーザ認証の方法は二つある。

1)mongoシェル起動時に認証する場合
$ mongo データベース名 -u ユーザ名 -p

2)mongoシェル起動後に認証する場合
> db.auth("hogehoge","password")

Ubuntu16.04にMongoDBをインストールした件

CONOHAに借りているUbuntuサーバにMongoDBをインストールしようとしたら結構はまったので、手順を書き残しておこうと思う。

1)パッケージ管理システムで使うパブリックキーを登録する
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

2)利用可能なパッケージ一覧にMongoDBを登録する
$ echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

上記のパッケージ一覧の登録はUbuntuのバージョンによって異なるので注意。
これはUbuntu16.04向けのもの。

3)パッケージデータベースを更新する
$ sudo apt-get update

4)MongoDBパッケージをインストールする
$ sudo apt-get install mongodb-org

5)MongoDBを起動する
$ sudo service mongod start

6)MongoDBを停止する
$ sudo service mongod stop

7)MongoDBを再起動する
$ sudo service mongod restart

8)MongoDBに接続する
$ mongo
MongoDB shell version v3.4.10
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.10
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
Server has startup warnings:
2017-10-19T23:40:31.232+0900 I STORAGE  [initandlisten]
2017-10-19T23:40:31.232+0900 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-10-19T23:40:31.232+0900 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2017-10-19T23:40:31.349+0900 I CONTROL  [initandlisten]
2017-10-19T23:40:31.349+0900 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-10-19T23:40:31.349+0900 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-10-19T23:40:31.349+0900 I CONTROL  [initandlisten]
2017-10-19T23:40:31.349+0900 I CONTROL  [initandlisten]
2017-10-19T23:40:31.349+0900 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-10-19T23:40:31.349+0900 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-10-19T23:40:31.349+0900 I CONTROL  [initandlisten]

9)WARNINGの消し方
WARNING: Access control is not enabled for the databaseを消す。

$ sudo mkdir /etc/ssl/mongodb
$ sudo openssl rand -base64 756 > security.key
$ sudo mv security.key /etc/ssl/mongodb/
$ sudo chmod 400 /etc/ssl/mongodb/security.key
$ sudo chown mongodb:mongodb /etc/ssl/mongodb/security.key

MongoDBの設定を変更するために、設定ファイルをエディタ編集する。
$ sudo vim /etc/mongod.conf

次の一文を追記する。
security:
  keyFile: /etc/ssl/mongodb/security.key

設定を反映させるためにmongodを再起動する。
$ sudo service mongod restart


WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always’.を消す。

$ sudo apt-get install sysfsutils

インストールが完了したら、/etc/sysfs.confファイルを編集する。
$ sudo vim /etc/sysfs.conf

次の一文を追記する。
kernel/mm/transparent_hugepage/enabled = never

sysfs.confを保存したら、Ubuntuを再起動する。

再起動した後、MongoDBに接続するとWARNINGが表示されなくなっているはず。
こんな風に。

$ mongo
MongoDB shell version v3.4.10
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.10
>

とりあえずMongoDBのインストールはこれでOKのようだ。