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

    技术2025-02-17  21

    密钥文件方式

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

    先部署好单节点集群,确认单节点部署一切正常连接数据库,创建root用户(超级用户) 这一步已经在安装单节点的时候做过了 :db.createUser( { "user" : "admin","pwd": "admin","roles" : [ { role: "dbOwner", db: "adbox" },{ role: "dbOwner", db: "fbbox" },{ role: "root", db: "admin" }] }) 修改配置文件,开启用户认证 # 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 生成用户认证key文件 openssl rand -base64 250 > mdb-keyfile-1.jks chmod 600 mdb-keyfile-1.jks 重启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的登录方式有两种:

    在登录期间进行身份验证 mongo --port 29017 -u "admin" -p "password" --authenticationDatabase "admin" 连接后进行身份验证 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端口中,原本创建的用户还是存在的。

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

    先部署好多节点集群,确认集群部署一切正常连接数据库,创建root用户(超级用户)修改配置文件,开启用户认证生成用户认证key文件,(集群个节点使用同一个key文件)重启mongodb进程

    x.509证书方式

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

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

    Processed: 0.009, SQL: 9