欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mongodb开启用户身份认证的集群部署

程序员文章站 2024-03-19 14:06:46
...

**文件方式

单节点集群开启用户认证步骤:

  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"
} :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/db.js:807:1
[email protected]/mongo/shell/db.js:819:19
[email protected]/mongo/shell/db.js:830:16
[email protected]/mongo/shell/utils.js:807:9
[email protected]/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证书方式

单节点集群开启用户认证步骤:

多节点集群开启用户认证步骤:

相关标签: 分布式 mongo