Collectionの一覧を取得
> use athena
> db.auth("test_id", "test_id")
> db.getCollectionNames()
リモートのMongoDBに接続
mongo --port 27017 -u "test" -p "test" --host 10.1.2.3 --authenticationDatabase "test_db"
Error MongoDB-CR Authentication failed. Missing credentials in user document
http://stackoverflow.com/questions/29006887/mongodb-cr-authentication-failed
mongo
use admin
db.system.users.remove({}) <== removing all users
db.system.version.remove({}) <== removing current version
db.system.version.insert({ "_id" : "authSchema", "currentVersion" : 3 })
MongoDB shutdown dbpathを調べてからshutdown
mongod --dbpath /var/lib/mongo --shutdown
MongoDBを起動
sudo mongod --auth --port 27017 --fork --syslog --dbpath /var/lib/mongo
sudo mongod -f /etc/mongod.conf
Centos7にMongoDBをインストール
/etc/yum.repos.d/mongodb-org.repo
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
sudo bash -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
sudo bash -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag"
sudo yum install mongodb-org
sudo systemctl start mongod
sudo systemctl stop mongod
sudo systemctl reload mongod
MongoDBのコンテナを利用する時にユーザーパスワードで認証できるまでのことを書いておきます。
Imageは https://hub.docker.com/_/mongo/
を使います。
ImageをPullしてくる
docker pull mongo
データを保存するたのData Volumeを作ります。
これだとコンテナに保存されるデータ(/data/db
にある)は全部ローカルホストの /mnt/general-use/docker-mongodb-data
に保存されて、MongoDBのコンテナを立ち上げる際にこのVolumeを使うといいです。
$ docker create --name mongo-data --volumes /mnt/general-use/docker-mongodb-data:/data/db centos
コンテナを立ち上げます。さっき作った mongo-data
というData Volumeを--volumes-from
オプションでMountします。
docker run -d --volumes-from mongo-data --name mongo -p 27017:27017 mongo
今の状態は認証のない状態で、これからadmin
データベースに一番強い管理権限のadmin
ユーザーを作って、さらにtest_id
ユーザーを作ります。
mongo
という名前のコンテナにログイン
$ docker exec -it mongo /bin/bash
admin
データベースに接続
root@79504bfb1970:/# mongo admin
MongoDB shell version: 3.2.10
connecting to: admin
これからadmin
という名前のユーザーを作る, ロール userAdminAnyDatabase
はかなり強力です。admin
ユーザーを作った後にそこで一回認証して、adminユーザーにログイン
> db.createUser({user: "admin", pwd: "password", roles: [{role: "userAdminAnyDatabase", db: "admin"}]})
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
> db.auth("admin", "password")
1
admin
ユーザーで認証した後にtest_id
というユーザーを作ります
> db.dropUser("test_id")
true
> db.createUser({user: "test_id", pwd: "test_id", roles: [{role: "readWrite", db: "user_accounts"}]})
Successfully added user: {
"user" : "test_id",
"roles" : [
{
"role" : "readWrite",
"db" : "user_accounts"
}
]
}
これでtest_id
というユーザーを作ったから。さっき立ち上がったコンテナを削除して、認証つきの--auth
オプションをつけてもう一回立ち上げます。
$ docker stop mongo && docker rm mongo
$ docker run -d --volumes-from mongo-data --name mongo -p 27017:27017 mongo --auth
これでローカルのMacからも Mongoclient
のようなGUIツールからuser_accounts
というデータベースにアクセスできるようになりました。
$ mongo
MongoDB shell version: 3.2.10
connecting to: test
> use goinggo
switched to db goinggo
> var a = new Timestamp();
> db.mycollection.insert({ts: a}); // timestampをinsert
WriteResult({ "nInserted" : 1 })
> show dbs # 有効なデータベスをチェック
athena 0.000GB
local 0.000GB
test 0.000GB
> # データベース作成
> use temp-db
> show dbs
> db.movie.insert({"name": "tutorials point"})
> show dbs
> Collectionを作成
> use temp-db
switched to db temp-db
> db.createCollection("mycollection")
{ "ok" : 1 }
> show collections
movie
mycollection
> # Collectionを削除
> db.mycollection.drop()
true
> show collections
movie
> Collectionの中のすべてのドキュメントを検索
> db.movie.find()
{ "_id" : ObjectId("5809a0c70fe81c45e6de7ec8"), "name" : "tutorials point" }
> # 特定のトキュメントを検索
> db.movie.insert({"name": "aws cloud"})
WriteResult({ "nInserted" : 1 })
> db.movie.insert({"name": "google cloud"})
WriteResult({ "nInserted" : 1 })
> db.movie.find({"name":"aws cloud"})
{ "_id" : ObjectId("5809a2de0fe81c45e6de7ec9"), "name" : "aws cloud" }
> ドキュメントを更新
> db.movie.update({"name": "aws cloud"}, {$set:{"name": "aws cloud is awesome"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> save()を使ってドキュメントを更新
> db.movie.save({"_id":ObjectId("5809a0c70fe81c45e6de7ec8"), "name": "mongodb tutorials point"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ユーザーを作成 https://docs.mongodb.com/v3.2/reference/method/db.createUser/
db.createUser({user: "test_id", pwd: "test_id", roles: [{role: "readWrite", db: "user_accounts"}]})
ユーザーリストと特定のユーザー情報
> use user_accounts
switched to db user_accounts
> db.getUsers()
[
{
"_id" : "user_accounts.test_id",
"user" : "test_id",
"db" : "user_accounts",
"roles" : [
{
"role" : "readWrite",
"db" : "user_accounts"
}
]
}
]
> db.getUser("test_id")
{
"_id" : "user_accounts.test_id",
"user" : "test_id",
"db" : "user_accounts",
"roles" : [
{
"role" : "readWrite",
"db" : "user_accounts"
}
]
}
ユーザーを削除
> db.dropUser("test_id")