[MongoDB]如何管理用戶和權限


管理用戶的創建及使用

創建用戶的函數是db.createUser({...}),創建用戶時通常需要為該用戶添加權限,如read、readWrite權限。

可添加的權限以及說明:

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

進入到MongoDB命令行,並切換到admin數據庫:

> use admin
switched to db admin

為某用戶添加userAdminAnyDatabase權限:

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

提示Successfully字樣的信息,即創建用戶成功:

Successfully added user: {
    ......
}

在重啟MongoDB服務之前,需在配置文件末尾處添加auth = true,之后必須先進行用戶權限認證才可操作數據庫:

# 權限認證
auth = true

進入到MongoDB命令行(會話)中,切換admin數據庫,並進行權限認證:

> use admin
switched to db admin
> db.auth("[username]", "[password]")
1

1代表用戶權限認證成功,0代表用戶權限認證失敗。

普通用戶的創建及使用

普通用戶除了無法使用clusterAdmin、readAnyDatabase、readWriteAnyDatabase等權限外,其他權限都可使用。

每一個數據庫都有自己的用戶組,用戶組中有多個用戶,每一個用戶的權限可以擁有多個。

[root@VM-0-6-centos mongodb-4.4.6]# ./bin/mongo
......
> db.auth("[username]", "[password]")
Error: Authentication failed.
0

如果沒有切換指定的數據庫,直接進行用戶權限認證,會提示認證失敗的消息。只有admin數據庫的用戶才有權限添加普通用戶。

> use admin
switched to db admin
> db.auth("[username]", "[password]")
1

為training數據庫添加一個普通用戶training:

> use training
switched to db training
> db.createUser( { user: "training", pwd: "training", roles: [ { role: "readWrite", db: "training" } ] } )
Successfully added user: {
	......
}

提示:如果當前會話中已經認證了A數據庫的用戶,再切換到B數據庫進行權限認證后,可能會提示“logical sessions can't have multiple authenticated users”錯誤。因為一次會話不能認證多個用戶。

更新用戶權限

db.updateUser("[username]", {...})函數可以修改用戶的權限以及其他信息。

更新權限之前,需要切換到被更新用戶所在的數據庫,更新操作需要當前會話中認證過的用戶具有userAdminuserAdminAnyDatabaseroot角色的用戶執行。

切換到admin數據庫,修改其中一個用戶的用戶權限:

db.updateUser(
    "[username]", 
    {
        "roles": [
            {
                "role": "userAdminAnyDatabase",
                "db": "admin"
            },
            {
                "role": "readWriteAnyDatabase",
                "db": "admin"
            },
            {
                "role": "dbAdminAnyDatabase",
                "db": "admin"
            }
        ]
    }
)

修改成功之后,顯示所有用戶,查看是否更改成功:

> show users
{
	"user" : "[username]",
	"db" : "admin",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		},
		{
			"role" : "readWriteAnyDatabase",
			"db" : "admin"
		},
		{
			"role" : "dbAdminAnyDatabase",
			"db" : "admin"
		}
	]
}

更改用戶密碼

db.updateUser("[username]", {"pwd": "[password]"})db.changeUserPassword("[username]", "[password]")可以更改用戶的密碼。

更新密碼之前,需要切換到被更新用戶所在的數據庫,更新操作需要當前會話中認證過的用戶具有userAdminuserAdminAnyDatabaseroot角色的用戶執行。

刪除用戶

db.dropUser("[username]")可以刪除用戶。

刪除用戶之前,需要切換到被刪除用戶所在的數據庫,更新操作需要當前會話中認證過的用戶具有userAdminuserAdminAnyDatabaseroot角色的用戶執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM