mongodb開啓用戶身份認證的集羣部署

密鑰文件方式

單節點集羣開啓用戶認證步驟:

  1. 先部署好單節點集羣,確認單節點部署一切正常
  2. 連接數據庫,創建root用戶(超級用戶)
這一步已經在安裝單節點的時候做過了
:db.createUser( { "user" : "admin","pwd": "admin","roles" : [ { role: "dbOwner", db: "adbox" },{ role: "dbOwner", db: "fbbox" },{ role: "root", db: "admin" }] })
  1. 修改配置文件,開啓用戶認證
# vim /data/config.conf 添加:
keyFile=/opt/mongodb/key/mdb-keyfile-1.jkx
clusterAuthMode=keyFile
auth=TRUE

#vim /data/mongos.cong
keyFile=/opt/mongodb/key/mdb-keyfile-1.jkx
clusterAuthMode=keyFile
  1. 生成用戶認證key文件
openssl rand -base64 250 > mdb-keyfile-1.jks
chmod 600 mdb-keyfile-1.jks
  1. 重啓mongodb進程
/opt/mongodb/bin/mongod -f /data/config.conf

/opt/mongodb/bin/mongod --shardsvr --replSet r4 --port 29017 --dbpath /data/r4 --logpath /var/log/dsafeshare/mongodb/r4.log --logappend --nssize 64 --oplogSize 10240 --maxConns 1000 --keyFile /opt/mongodb/key/mdb-keyfile-1.jkx --auth --fork

/opt/mongodb/bin/mongos -f /data/mongos.cong

Note1:
當開啓身份認證後,會提示無法如下錯誤,線需要進行處理如下db.auth(“admin”,“admin”)

r4:PRIMARY> show collections
2020-06-08T13:45:42.693+0800 E QUERY    [thread1] Error: listCollections failed: {
	"ok" : 0,
	"errmsg" : "not authorized on test to execute command { listCollections: 1.0, filter: {} }",
	"code" : 13,
	"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype._getCollectionInfosCommand@src/mongo/shell/db.js:807:1
DB.prototype.getCollectionInfos@src/mongo/shell/db.js:819:19
DB.prototype.getCollectionNames@src/mongo/shell/db.js:830:16
shellHelper.show@src/mongo/shell/utils.js:807:9
shellHelper@src/mongo/shell/utils.js:704:15
@(shellhelp2):1:1
r4:PRIMARY> db.auth("admin","admin")
Error: Authentication failed.
0
r4:PRIMARY> db.auth("admin","password")
Error: Authentication failed.
0
r4:PRIMARY> use admin
switched to db admin
r4:PRIMARY> db.auth("admin","password")
1
r4:PRIMARY> show collections
system.users
system.version
r4:PRIMARY> 

Note2:
身份認證配置好了以後,進行登錄測試,mongo的登錄方式有兩種:

  1. 在登錄期間進行身份驗證
mongo --port 29017 -u "admin" -p "password" --authenticationDatabase "admin"
  1. 連接後進行身份驗證
r4:PRIMARY> use admin
switched to db admin
r4:PRIMARY> db.auth("admin","password")
1

Note3:
按以下順序重啓所有服務(這個還沒有驗證第二個和第三個順序顛倒會怎樣)
config副本集
router服務
shard副本集

未知問題:
啓用用戶認證以後,出現用戶都被清空了(或者沒有清空,只是我看不到了),然後連接數據庫都無法連接進行認證,這個時候,按照初次啓用認證,沒有用戶的情況,創建首個用戶,創建成功,所以接下來的可能的操作就是把我們系統用到的用戶再創建一遍

# mongo --port 29017
r4:PRIMARY> use admin
switched to db admin
r4:PRIMARY> db.createUser({user:"root",pwd:"root",roles:[{role:"root",db:"admin"}]})
Successfully added user: {
	"user" : "root",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}
r4:PRIMARY> db.auth("root","root")
1
r4:PRIMARY> db.system.users.find()
{ "_id" : "admin.root", "userId" : BinData(4,"v0RpNlKbRJqNnC6xZru7rA=="), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "viBoAxUMs/tT4pio1MbSxA==", "storedKey" : "XKCOfKkGdM/uo3RPMDaBUf48UHo=", "serverKey" : "go8VloZVuZrPQTz/D2/kx/ry8VQ=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }

r4:PRIMARY> show dbs
adbox  0.001GB
admin  0.000GB
fbbox  0.047GB
local  0.001GB
r4:PRIMARY> db.createUser( { "user" : "admin","pwd": "admin","roles" : [ { role: "dbOwner", db: "adbox" },{ role: "dbOwner", db: "fbbox" },{ role: "root", db: "admin" }] })

Successfully added user: {
	"user" : "admin",
	"roles" : [
		{
			"role" : "dbOwner",
			"db" : "adbox"
		},
		{
			"role" : "dbOwner",
			"db" : "fbbox"
		},
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}

還有用戶認證問題:https://www.cnblogs.com/operationhome/p/9844268.html

2020-7-1 13:57:00記

對於上面提到的未知問題,現在找到了問題原因,進行解釋一下。
問題中提到,在啓用身份認證以後,原本存在的用戶消失了,無法查詢到,其原因是因爲登錄的端口不對,我再mongos的3000端口中建的用戶,在mongodb的29017中就無法查詢到了,這是正常的現象。在3000端口中,原本創建的用戶還是存在的。

多節點集羣開啓用戶認證步驟:

  1. 先部署好多節點集羣,確認集羣部署一切正常
  2. 連接數據庫,創建root用戶(超級用戶)
  3. 修改配置文件,開啓用戶認證
  4. 生成用戶認證key文件,(集羣個節點使用同一個key文件)
  5. 重啓mongodb進程

x.509證書方式

單節點集羣開啓用戶認證步驟:

多節點集羣開啓用戶認證步驟:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章