MongoDB 6.0.3 使用者管理

chenoracle發表於2022-12-20

引數檔案

vi /mongodb/27017/conf/mongodb.conf 
vi /mongodb/27018/conf/mongodb.conf 
vi /mongodb/27019/conf/mongodb.conf 
新增引數
auth=true

重啟資料庫

mongosh --port 27017
db.shutdownServer();
mongod -config /mongodb/27017/conf/mongodb.conf

啟動報錯

BadValue: security.keyFile is required when authorization is enabled with replica sets
try 'mongod --help' for more information

所有副本集節點都必須要用同一份keyfile,一般是在一臺機器上生成,然後複製到其他機器上,且必須有讀的許可權

建立目錄

[mongo@cjc-db-01 ~]$ mkdir /mongodb/27017/key
[mongo@cjc-db-01 ~]$ mkdir /mongodb/27018/key
[mongo@cjc-db-01 ~]$ mkdir /mongodb/27019/key

生成key檔案

cd /mongodb/27017/key/
openssl rand -base64 90 -out ./mongo.keyfile
chmod 400 mongo.keyfile

複製

cp mongo.keyfile /mongodb/27018/key/
cp mongo.keyfile /mongodb/27019/key/

修改配置檔案指定KEYFILE

分別編輯幾個服務的mongod.conf檔案,新增相關內容:

[mongo@cjc-db-01 ~]$ vi /mongodb/27017/conf/mongodb.conf 
keyFile=/mongodb/27017/key/mongo.keyfile
其他節點
keyFile=/mongodb/27018/key/mongo.keyfile
keyFile=/mongodb/27019/key/mongo.keyfile

啟動資料庫

mongod -config /mongodb/27017/conf/mongodb.conf
mongod -config /mongodb/27018/conf/mongodb.conf
mongod -config /mongodb/27019/conf/mongodb.conf

登入

[mongo@cjc-db-01 ~]$ mongosh --port 27017
Current Mongosh Log ID:63a14d11c836e43ca102748d
Connecting to:mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.1
Using MongoDB:6.0.3
Using Mongosh:1.6.1
For mongosh info see: 
cjcmonset [direct: primary] test> use admin
switched to db admin

建立使用者 

db.createUser({user:"admin",pwd:"admin",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

登入使用者

db.auth('admin','admin')

繼續建立使用者

db.createUser({user:"root",pwd:"root",roles:["root"]})

普通使用者許可權

db.createUser({user:"cjc",pwd:"cjc",roles:[{role:"readWrite",db:"cjc"}]})
db.auth('cjc','cjc')
cjcmonset [direct: primary] cjc> db.t01.find();
[
  { _id: ObjectId("63a113836be69aceb7e1ae9b"), tname: 'cjc' },
  { _id: ObjectId("63a1217973fc637ac59b96f0"), txx: 'abc' },
  { _id: ObjectId("63a126e5406e8620614e4fd5"), aaa: 'ccc' }
]

指定使用者登入

[mongo@cjc-db-01 ~]$ mongosh  -u cjc -p cjc --host 192.168.31.200 --port 27017
Current Mongosh Log ID:63a158914d0cfb76efb68786
Connecting to:mongodb://<credentials>@192.168.31.200:27017/?directConnection=true&appName=mongosh+1.6.1
Using MongoDB:6.0.3
Using Mongosh:1.6.1
For mongosh info see: 
cjcmonset [direct: primary] test>

引數檔案

[mongo@cjc-db-01 ~]$ cat /mongodb/27017/conf/mongodb.conf 
dbpath=/mongodb/27017/data
logpath=/mongodb/27017/log/mongodb.log
logappend=true
bind_ip = 0.0.0.0
fork = true
port = 27017
replSet=cjcmonset
auth=true
keyFile=/mongodb/27018/key/mongo.keyfile

資料庫許可權說明:

Built-In Roles(內建角色):

1. 資料庫使用者角色:read、readWrite;
2. 資料庫管理角色:dbAdmin、dbOwner、userAdmin;
3. 叢集管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 備份恢復角色:backup、restore;
5. 所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超級使用者角色:root  
// 這裡還有幾個角色間接或直接提供了系統超級使用者的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 內部角色:__system

具體角色的功能: 

Read:允許使用者讀取指定資料庫
readWrite:允許使用者讀寫指定資料庫
dbAdmin:允許使用者在指定資料庫中執行管理函式,如索引建立、刪除,檢視統計或訪問system.profile
userAdmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、刪除和管理使用者
clusterAdmin:只在admin資料庫中可用,賦予使用者所有分片和複製集相關函式的管理許可權。
readAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀許可權
readWriteAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀寫許可權
userAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的userAdmin許可權
dbAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的dbAdmin許可權。
root:只在admin資料庫中可用。超級賬號,超級許可權

###chenjuchao 20221220 16:55###

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2928763/,如需轉載,請註明出處,否則將追究法律責任。

相關文章