mongodb--創建用戶權限

最近在部署MongoDB Replica Set,馬上就到生產環境了,一想還沒有給數據庫設置用戶權限,配置的這一路踩了好多坑,希望對大家有幫助

 

1. 配置好mongodb replica set 安裝及三結點配置:

#下載地址:
https://www.mongodb.com/download-center?jmp=nav#community
下載後直接解壓,安裝rpm包
啓動命令:
mongod -f /home/root/mongoconf/mongodb_master.conf

#master.conf
dbpath=/home/root/mongodata/master
logpath
=/home/root/mongolog/master.log
pidfilepath
=/opt/mongodb/master.pid
#keyFile=/opt/mongodb/mongodb.key
directoryperdb=true
logappend
=true
replSet
=bbt
bind_ip
= <ip>
port
=27017
#auth=true
oplogSize=100
fork
=true
noprealloc
=true
#maxConns=4000

#arbiter.conf 仲裁配置 和主機在一個服務器
dbpath=/home/root/mongodata/arbiter
logpath
=/home/root/mongolog/arbiter.log
pidfilepath
=/opt/mongodb/arbiter.pid
#keyFile=/opt/mongodb/mongodb.key
directoryperdb=true
logappend
=true
replSet
=bbt
bind_ip
=<ip>
port
=27019
#auth=true
oplogSize=100
fork
=true
noprealloc
=true
#maxConns=4000

#slave.conf
dbpath=/home/root/mongodata/slave
logpath
=/home/root/mongolog/slave.log
pidfilepath
=/opt/mongodb/slave.pid
#keyFile=/opt/mongodb/mongodb.key
directoryperdb=true
logappend
=true
replSet
=testdb
bind_ip
=<ip2>
port
=27017
#auth=true
oplogSize=100
fork
=true
noprealloc
=true
#maxConns=4000

 

啓動後可任意找一個結點登錄:
mongo 172.31.138.31:27017
執行以下命令配置集羣:
cfg={ _id:"bbt", members:[ {_id:0,host:'172.31.138.31:27017',priority:2}, {_id:1,host:'172.31.138.30:27017',priority:1}, {_id:2,host:'172.31.138.31:27019',arbiterOnly:true}] };
rs.initiate(cfg)
rs.status() #查看集羣狀態

 

2.開始配置用戶權限前的準備

由於前面配置好後所有結點的MongoDB服務都啓動了,所以第二步先service mongod stop(所有結點都要停止服務) 注:這個命令不一定有效
此步驟可用
mongod -f /home/root/mongoconf/mongodb_master.conf --shutdown

 

3. 啓動其中一臺mongod服務, 正常啓動,不要開啓認證功能(#auth=true不要打開),並執行下面語句

 1 use admin
 2 #創建用戶管理權限
 3 db.createUser(  
 4   { user: "admin",  
 5     pwd: "admin",  
 6     roles: [{ role: "userAdminAnyDatabase", db: "admin" }]  
 7   } 
 8 
 9 
10 use test
11 #創建用戶操作權限(創建幾個都可以)
12 db.createUser({ user: "userrwadmin",  pwd: "userrw@hswj0424",  roles: [{ role: "readWrite", db: "bbt" }]})
13 db.createUser({ user: "userradmin",  pwd: "userr@hswj0424",  roles: [{ role: "read", db: "bbt" }]})

 

4. 先在一臺機器上產生mongodb keyfile

openssl rand -base64 741 > /home/root/mongodb-keyfile
chmod 600 /home/root/mongodb-keyfile

 

5.將mongodb-keyfile文件拷貝到各個節點上 並且賦予權限 (沒有賦予權限的話mongo服務器不能啓動)

 

6. 修改mongo.conf

keyFile=/home/root/mongodb-keyfile
auth = true

 

7.重啓所有結點的mongod服務就ok了

 

8。操作驗證

這兩個是兩臺認證的user 和 pwd
use admin
db.auth('bbtadmin','mongo@hswj0424')
use bbt
db.auth('userrwadmin','userrw@hswj0424')

也可以可以使用mongo 172.31.138.31:27017 -u userrwadmin -p userrw@hswj0424 --authenticationDatabase bbt 去查看集合的內容
否則會報錯——
too many users are authenticated 

9.總結

1. 給admin庫添加用戶名和密碼時,只需要在一個結點上操作,只要配置好了replica set, 用戶名和密碼會同步到其他結點.
2. 關於用戶名密碼認證和結點之間認證.
前者是對於mongodb client而言,處於對每個庫的安全考慮,client端想操作數據庫,必須先用用戶名和密碼登錄,即配置文件中的auth=true;
而對於節點之間的認證,其實跟前面用戶名密碼認證是分離的,是讓各結點之間有一個key來保持通信,即數據的同步等,是對整個集羣成員的安全進行考慮,避免其他用戶給集羣胡亂添加成員.即配置文件中的keyFile;

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