IT Notebook

とあるエンジニアの備忘録

MongoDB - シャード+レプリカセット構成でのユーザ作成について

シャード+レプリカセット構成でユーザ作成をする場合は、順番は多少前後してもよさそうだけど、まずレプリカセットでユーザを作成したあと、シャードでユーザを作成するのがよさそう

前提条件

  • レプリカセットは構築済み
  • シャード構成は構築済み
  • mongosのポートは27017
  • mongodのポートは27018
  • mongocのポートは27019
  • 「/etc/mongod/mongodb-keyfile」の権限は600で作成済み

レプリカセットでユーザ作成

noauthモードでmongod起動

  • mongodのauth関連の設定ファイルはこんな感じ
noauth=true
#auth=true
#keyfile=/etc/mongod/mongod-keyfile

管理ユーザ作成

  • mongodのPRAIMARYで実行する
  • PRIMARYで実行するとSECONDARYに同期される
mongo --port 27018 admin
db.createUser( { user: "root", pwd: "PASSWORD", roles: [ "root", "backup", "restore", "readWriteAnyDatabase", "userAdminAnyDatabase", "dbAdminAnyDatabase" ] } )
db.createUser( { user: "admin", pwd: "PASSWORD", roles: [ "root", "backup", "restore", "readWriteAnyDatabase", "userAdminAnyDatabase", "dbAdminAnyDatabase" ] } )
exit
mongo --port 27018 admin -u root -p PASSWORD
use sg2
db.createUser( { user: "app", pwd: "PASSWORD", roles: [ { role: "dbOwner", db: "appdb" },  { role: "dbOwner", db: "appdb" } ] } )
use admin
db.system.users.find()
exit

authモードでmongod起動

  • mongodのauth関連の設定ファイルはこんな感じ
  • レプリカセットの場合はkeyfileがないとレプリケーションできない
#noauth=true
auth=true
keyfile=/etc/mongod/mongod-keyfile

シャードでユーザ作成

authモードでmongoc起動

  • mongocのauth関連の設定ファイルはこんな感じ
#noauth=true
auth=true
keyfile=/etc/mongod/mongod-keyfile

noauthモードでmongos起動

  • mongosのauth関連の設定ファイルはこんな感じ
noauth=true
#auth=true
#keyfile=/etc/mongod/mongod-keyfile

管理ユーザ作成

  • mongosで実行する
  • mongosで実行するとmongocに同期される
mongo --port 27018 admin
db.createUser( { user: "root", pwd: "PASSWORD", roles: [ "root", "backup", "restore", "readWriteAnyDatabase", "userAdminAnyDatabase", "dbAdminAnyDatabase" ] } )
db.createUser( { user: "admin", pwd: "PASSWORD", roles: [ "root", "backup", "restore", "readWriteAnyDatabase", "userAdminAnyDatabase", "dbAdminAnyDatabase" ] } )
exit
mongo --port 27018 admin -u root -p PASSWORD
use sg2
db.createUser( { user: "app", pwd: "PASSWORD", roles: [ { role: "dbOwner", db: "appdb" },  { role: "dbOwner", db: "appdb" } ] } )
use admin
db.system.users.find()
exit

※参考