Mongodb副本集認證受權

副本集架構中須要開啓用戶的受權認證,也要配置副本集內部、成員身份驗證。副本集對於成員的內部身份驗證,MongoDB能夠使用keyfiles或x.509證書。
使用keyfile身份驗證,副本集中的每一個mongod實例都將keyfile的內容用做對部署中其餘成員進行身份驗證的共享密碼。只有具備正確密鑰文件的mongod實例才能加入副本集。
所選方法用於全部內部通訊。例如,當客戶端使用支持的身份驗證機制之一貫mongos進行身份驗證時,mongos而後使用配置的內部身份驗證方法鏈接到所需的mongod進程。
mongodb

開啓認證受權、和內部認證咱們須要下列步驟。

咱們須要建立管理員用戶
建立祕鑰文件
開啓認證
重啓服務shell

一、副本集詳情:

副本集成員:
192.168.6.17:27031
192.168.6.17:27032
192.168.6.17:27033

1.一、副本集配置文件:

systemLog:
  destination: file
  logAppend: true
  path: /data/mdb1/logs/mongod.log
storage:
  dbPath: /data/mdb1/data
  journal:
    enabled: true
  directoryPerDB: true
  wiredTiger:
     engineConfig:
        directoryForIndexes: true
processManagement:
  fork: true
  pidFilePath: /data/mdb1/pid/mongod.pid
net:
  port: 27031
  bindIp: 192.168.6.17,localhost
  maxIncomingConnections: 50
#security:
#  keyFile: /data/mdb1/conf/keyfile
#  authorization: enabled
replication:
   replSetName: rs02

'副本集詳細配置'數據庫

二、首先咱們鏈接副本集的PRIMARY節點,建立用戶

[root@VM_6_17_centos ~]# /root/mongodb-4.2.1/bin/mongo   192.168.6.17:27031
rs02:PRIMARY> use admin
switched to db admin
rs02:PRIMARY>db.createUser({
user:"mydba",
pwd:"12348970",
roles:
[
  {
    role:"root",
    db:"admin"
  }
]})
rs02:PRIMARY> db.getUsers()                  //查看admin數據庫的用戶
[
    {
        "_id" : "admin.mydba",
        "userId" : UUID("11aefd2d-ca1b-405e-b4d2-c79ec66c2a7e"),
        "user" : "mydba",
        "db" : "admin",
        "roles" : [
            {
                "role" : "root",
                "db" : "admin"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
]
rs02:PRIMARY>

建立祕鑰文件
openssl rand-base64 756 > keyfile
chmod 400 keyfilecentos

[root@VM_6_17_centos ~]# cp keyfile /data/mdb1/conf/
[root@VM_6_17_centos ~]# cp keyfile /data/mdb2/conf/
[root@VM_6_17_centos ~]# cp keyfile /data/mdb3/conf/
開啓認證:api

三、修改副本集集羣全部成員的配置文件,開啓認證

systemLog:
  destination: file
  logAppend: true
  path: /data/mdb1/logs/mongod.log
storage:
  dbPath: /data/mdb1/data
  journal:
    enabled: true
  directoryPerDB: true
  wiredTiger:
     engineConfig:
        directoryForIndexes: true
processManagement:
  fork: true
  pidFilePath: /data/mdb1/pid/mongod.pid
net:
  port: 27031
  bindIp: 192.168.6.17,localhost
  maxIncomingConnections: 50
security:
  keyFile: /data/mdb1/conf/keyfile                //內部使用keyfile
  authorization: enabled                                //開啓認證
replication:
   replSetName: rs02

四、重啓三個副本集節點,

如今咱們在鏈接PRIMARY節點服務器

[root@VM_6_17_centos ~]# /root/mongodb-4.2.1/bin/mongo   192.168.6.17:27031/admin  -u mydba  -p
MongoDB shell version v4.2.1
Enter password:                                 //輸入密碼

rs02:PRIMARY> show dbs;
admin     0.000GB
config    0.000GB
local     0.001GB
test_jia  0.000GB
rs02:PRIMARY> use test_jia
switched to db test_jia
rs02:PRIMARY> show tables;
user_hobby
user_info
rs02:PRIMARY>  
rs02:PRIMARY> db.createUser({              
... user:"haijiao",                //咱們建立普通用戶並受權
... pwd:"87690544",
... roles:
... [
...   {
...     role:"readWrite",
...     db:"test_jia"
...   }
... ]})
Successfully added user: {
    "user" : "haijiao",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "test_jia"
        }

五、咱們使用普通用戶登陸數據庫

[root@VM_6_17_centos ~]# /root/mongodb-4.2.1/bin/mongo   192.168.6.17:27031/test_jia  -u haijiao -p
MongoDB shell version v4.2.1
Enter password:
connecting to: mongodb://192.168.6.17:27031/test_jia?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("bfa70dfe-2710-473c-90fb-59ab1ab97437") }
MongoDB server version: 4.2.1
rs02:PRIMARY> show tables;
user_hobby
user_info
rs02:PRIMARY> show dbs
test_jia  0.000GB
rs02:PRIMARY>

5.一、咱們也能夠用另外一種方式登陸

[root@VM_6_17_centos ~]# /root/mongodb-4.2.1/bin/mongo   192.168.6.17:27032/test_jia
MongoDB shell version v4.2.1
connecting to: mongodb://192.168.6.17:27032/test_jia?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("2f7b17b3-bb01-46c4-ac37-a89c2e4586e4") }
MongoDB server version: 4.2.1
rs02:PRIMARY> show dbs;                                                           //沒有權限
rs02:PRIMARY>  db.auth("haijiao","87690544")                          //認證
1
rs02:PRIMARY> show dbs;
test_jia  0.000GB
rs02:PRIMARY>
rs02:PRIMARY> show tables;
user_hobby
user_info
rs02:PRIMARY>

總結:咱們在線上部署時副本集使用域名進行配置,能夠避免因爲ip地址更改而致使的配置更改,
儘可能使用複雜的密碼,服務器的數據端口使用防火牆進行限制,外網所有禁用,
內部能夠容許某個ip或者網段訪問,而且開啓客戶端認證受權。session

下一章咱們瞭解認證受權的詳細內容。架構

相關文章
相關標籤/搜索