MongoDB 用戶相關操作

   在我們第一次啟動MongoDB的時候,僅僅是制定瞭data數據目錄和log日志目錄,並沒有指定–auth選項,也就是並不需要認證。

[root@VM-0-14-centos mongo_27017]# mongo
MongoDB shell version v4.0.6
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("61c35b47-f43b-48fc-a43e-066f56987e9a") }
MongoDB server version: 4.0.6
> db
test

> show dbs;
admin  0.000GB
config 0.000GB
local  0.000GB

> use admin
switched to db admin

> show users;
> db.system.user.find()

      我們第一次登錄MongoDB的服務,輸入db,發現當前數據庫是test,但是show dbs卻看不到test數據庫,其實這個是MongoDB的一個特點,test是一個虛的數據庫,想要看到test中的內容,你隻需要給test數據庫中插入一個文檔即可。

     接著,我們可以看到,當我們輸入show users的時候,沒有看到任何賬號信息。接下來我們準備開啟–auth參數來重啟MongoDB服務,在重啟之前,我們需要保證已經分配瞭新的賬號,下面我們開始分配賬號:

> db.createUser({ user: "root", pwd: "123456", roles: [ { role: "root", db: "admin"} ]}) 
Successfully added user: {
    "user" : "root",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}

這裡,我們可以看到,我們分配瞭一個賬號:

user:root     # 用戶名

pwd:123456 # 密碼

roles:root    # 角色

db:admin     # 數據庫

角色root有必要做一下解釋:

Read:   允許用戶讀取指定數據庫,
readWrite:允許用戶讀寫指定數據庫
dbAdmin: 允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以在指定數據庫裡創建、刪除和管理用戶
clusterAdmin:     隻在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
readAnyDatabase:    隻在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase: 隻在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase: 隻在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
dbAdminAnyDatabase:  隻在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
root:         隻在admin數據庫中可用。超級賬號,超級權限

更詳細的內容,請參看官方文檔:

https://docs.mongodb.com/manual/reference/built-in-roles/#dbAdmin

好瞭,創建好用戶之後,我們重啟MongoDB服務,在配置文件中打開–auth參數,或者直接在命令行裡面指定auth參數,重新登陸:

[root@VM-0-14-centos mongo_27017]# mongo
MongoDB shell version v4.0.6
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("5f2b0fa6-a1e3-4aaf-b43f-3525e19c33d2") }
MongoDB server version: 4.0.6
> 
> use admin
switched to db admin
> show users
2020-10-28T23:42:06.127+0800 E QUERY  [js] Error: command usersInfo requires authentication :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.getUsers@src/mongo/shell/db.js:1763:1
shellHelper.show@src/mongo/shell/utils.js:859:9
shellHelper@src/mongo/shell/utils.js:766:15
@(shellhelp2):1:1
> db.auth("root","123456")
1
> show users
{
    "_id" : "admin.root",
    "user" : "root",
    "db" : "admin",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ],
    "mechanisms" : [
        "SCRAM-SHA-1",
        "SCRAM-SHA-256"
    ]
}

可以看到,當我們第一次使用show users的命令查看用戶的時候,系統拒絕瞭我們,顯示:

Error: command usersInfo requires authentication

然後我們進行權限校驗:

use admin

db.auth(“root”,”123456″)

這下可以瞭。

不知道大傢有沒有留意到一個細節,我們登陸的時候,使用mongo命令登陸的,然後進行用戶認證,有沒有一種方法可以直接在登陸的時候就進行用戶認證呢?答案是有的。

登陸方法一:

mongo

use admin

db.auth(“user”:”password”)

登陸方法二:

mongo -u “user” -p “password”

如下:

[root@VM-0-14-centos mongo_27017]# mongo -u "root" -p "123456"
MongoDB shell version v4.0.6
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ef872d7a-77d9-43c2-bf3d-e04867379c0a") }
MongoDB server version: 4.0.6
> use admin 
switched to db admin
> show users
{
    "_id" : "admin.root",
    "user" : "root",
    "db" : "admin",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ],
    "mechanisms" : [
        "SCRAM-SHA-1",
        "SCRAM-SHA-256"
    ]
}
>

到這裡,我們已經學會瞭第一次登陸MongoDB之後,如何進行初始用戶配置、如何開啟MongoDB的認證模式(–auth參數)、以及在登錄的時候如何進行用戶認證,用戶這塊兒還有很多其他內容,下一節我們展開說。

以上就是MongoDB 用戶相關操作的詳細內容,更多關於MongoDB 用戶操作的資料請關註WalkonNet其它相關文章!

推薦閱讀: