mongodb權(quán)限管理01-創(chuàng)新互聯(lián)

mongodb權(quán)限管理基礎(chǔ)概念
概念解釋
1.數(shù)據(jù)庫用戶角色
read:該角色擁有數(shù)據(jù)的只讀權(quán)限,系統(tǒng)集合以及system.indexes,system.js,system.namespaces集合除外。
readWrite:該角色擁有對(duì)應(yīng)數(shù)據(jù)庫的讀寫權(quán)限,系統(tǒng)集合和system.js集合除外。
2.數(shù)據(jù)庫管理角色
dbAdmin:該角色擁有指定數(shù)據(jù)庫數(shù)據(jù)庫管理權(quán)限,包括 system.indexes, system.namespaces, system.profile集合的操作權(quán)限。該角色不擁有所有非系統(tǒng)集合的讀權(quán)限。
dbOwner:該角色擁有指定數(shù)據(jù)庫的所有權(quán)限,該角色包括:readWrite、dbAdmin、userAdmin。
userAdmin:該角色擁有指定數(shù)據(jù)庫用戶和角色的管理權(quán)限。包括創(chuàng)建用戶等。
3.群集管理角色
clusterAdmin:該角色擁有群集的所有權(quán)限。該角色包含clusterManager,clusterMonitor,hostManager 角色權(quán)限。同時(shí)還要?jiǎng)h除數(shù)據(jù)庫的權(quán)限。
clusterManager:該角色擁有群集的管理和監(jiān)控權(quán)限,包括對(duì)local、config數(shù)據(jù)庫的訪問權(quán)限。同時(shí)該角色擁有分片和復(fù)制集的管理權(quán)限。
clusterMonitor:該角色擁有群集的監(jiān)控權(quán)限。
hostManager:該角色擁有群集的監(jiān)控和服務(wù)管理權(quán)限。
//注意:這些角色只能在Admin數(shù)據(jù)庫下創(chuàng)建
4.備份還原角色
backup:該角色擁有備份數(shù)據(jù)的權(quán)限。
restore:該角色擁有還原備份數(shù)據(jù)的權(quán)限。
//注意:這些角色只能在Admin數(shù)據(jù)庫下創(chuàng)建
5.所有數(shù)據(jù)庫角色
該分類下面的角色權(quán)限和數(shù)據(jù)庫角色權(quán)限一樣,區(qū)別在于它擁有的是所有數(shù)據(jù)庫的權(quán)限而不是指定數(shù)據(jù)庫下的權(quán)限。但是不擁有system.*相關(guān)集合、local、config數(shù)據(jù)庫的權(quán)限。
readAnyDatabase
readWriteAnyDatabase
userAdminAnyDatabase
dbAdminAnyDatabase
//注意:這些角色只能在Admin數(shù)據(jù)庫下創(chuàng)建
6.超級(jí)權(quán)限角色
root:該角色擁有所有權(quán)限,該角色包含readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase, clusterAdmin roles, restore, and backup角色。
注意:該角色只能在創(chuàng)建在Admin庫中
7.內(nèi)部角色
__system:該角色為系統(tǒng)內(nèi)部角色,比如復(fù)制集成員、mongos使用。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),宏偉企業(yè)網(wǎng)站建設(shè),宏偉品牌網(wǎng)站建設(shè),網(wǎng)站定制,宏偉網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,宏偉網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

參考鏈接:我們需要整理小結(jié)一下,整個(gè)流程
MongoDB 4.X 用戶和角色權(quán)限管理總結(jié)
https://www.cnblogs.com/dbabd/p/10811523.html
//完全參照此鏈接 可行

小結(jié)如下:
1、謹(jǐn)記:先在不開啟認(rèn)證的情況下,創(chuàng)建用戶,之后關(guān)閉服務(wù),然后再開啟認(rèn)證,才生效。
2、我們正常的搭建mongodb,然后在創(chuàng)建自定義角色
(在admin數(shù)據(jù)庫中創(chuàng)建自定義用戶dbabd,對(duì)集合city有find,update權(quán)限,對(duì)集合user_operation只有find權(quán)限。)
//我的猜想,我們可以不創(chuàng)建這個(gè) 后面進(jìn)行驗(yàn)證
3、用戶,必須先創(chuàng)建“創(chuàng)建用戶管理的用戶”
//啟用訪問控制登錄之前,首先需要在admin數(shù)據(jù)庫中創(chuàng)建角色為userAdmin或userAdminAnyDatabase作為用戶管理的用戶,之后才能通過這個(gè)用戶創(chuàng)建其它角色的用戶,這個(gè)用戶作為其它所有用戶的管理者。
4、開啟訪問控制,在這里我們?cè)趩?dòng) mongodb的時(shí)候加上--auth (注意,我們?cè)谂渲梦募屑觓uth=true的時(shí)候沒有成功)
//[root@prd3-mysql-0-36 ~]# mongod -f /ivargo/app/mongodb/conf/mongo.conf --auth
5、用戶管理用戶驗(yàn)證 可以使用我們創(chuàng)建的管理用戶的用戶去登錄 ,在這里就是user_admin 這個(gè)用戶去登錄
//可以理解為 是目前mongodb的最高權(quán)限者
6、接下來,才是創(chuàng)建一個(gè)普通用戶,給他某個(gè)庫的可讀,可寫的權(quán)限
//也就是說,必須要自己先創(chuàng)建一個(gè)管理普通用戶的用戶,然后在登錄到這個(gè)管理用戶的用戶下 去創(chuàng)建文明想要?jiǎng)?chuàng)建的用戶。
7、創(chuàng)建好了普通用戶,之后,就是為用戶添加角色(我的理解,角色就是權(quán)限的意思)
比如 為用戶dbabd_user添加dbabd數(shù)據(jù)庫的read角色(權(quán)限)。

接下來,我們可以根據(jù)我寫的小結(jié),再次的實(shí)驗(yàn)一次

上面的測(cè)試中創(chuàng)建管理用戶用戶名 的角色為 userAdminAnyDatabase 他的權(quán)限分配為:可以在指定數(shù)據(jù)庫創(chuàng)建和修改用戶(除了數(shù)據(jù)庫config和local之外)。
如果是root的角色的話,那么就是超級(jí)大的權(quán)限 ,我們下面試一下,最高的root權(quán)限

// 創(chuàng)建管理用戶用戶名為user_admin,密碼admin
db.createUser(
{
user: "user_admin",
pwd: "admin",
roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
}
)

//總結(jié)

use admin
switched to db admin
db.system.users.find()
{ "_id" : "admin.user_admin", "user" : "user_admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "YVnHB6u4l4kxyVkAG9h7bQ==", "storedKey" : "u0bVa7oIMBQpyD8vzv9HQHAHBGk=", "serverKey" : "XE9j9YQKKWi8/1CdXchLWILs6Ds=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "q1riE6iDxYrY3ROeVAw59q8DXg47B5DeGxtw6w==", "storedKey" : "OVbdZPfC7CsmHGZKKiW2jH50cqMgPX8OfTgfcTg3MXM=", "serverKey" : "0TjC2lObSJ7lmzwTMNXWWeG6leHLpzK9n+VReDUrKEs=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
{ "_id" : "admin.dbabd_user", "user" : "dbabd_user", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "Uvls4hIsjxHctMK8etQRQA==", "storedKey" : "/KAF4Zl7nOmeMEy+UBnpLVNPhvw=", "serverKey" : "/g85OaGcrfWAfisbllqAdqjUTP8=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "vCoqeEVfao5T6Rv6dMlw7J6zDFU0KoqDjRxXyA==", "storedKey" : "IL1NENjImUYXiRuxxSA3uz4ein8OPNx/VJZVag0BcV0=", "serverKey" : "GCRyzJ8siZEgAL6qURfuY4GQn7VYz4+o2PmtmT4rqmc=" } }, "customData" : { "info" : "user for dbabd" }, "roles" : [ { "role" : "read", "db" : "dbabd" }, { "role" : "dbabd", "db" : "admin" }, { "role" : "read", "db" : "admin" } ] }

show users;
{
"_id" : "admin.dbabd_user",
"user" : "dbabd_user", //這是創(chuàng)建的普通的用戶
"db" : "admin",
"customData" : {
"info" : "user for dbabd"
},
"roles" : [
{
"role" : "read", //角色為只讀
"db" : "dbabd" //針對(duì)dbadb這個(gè)數(shù)據(jù)庫
},
{
"role" : "dbabd", //這個(gè)角色是我們自己創(chuàng)建自定義的角色 dbabd
"db" : "admin"
},
{
"role" : "read",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
{
"_id" : "admin.user_admin", //管理普通用戶的用戶
"user" : "user_admin",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}

自定義實(shí)驗(yàn) ***** 很重要,看完 https://www.cnblogs.com/dbabd/p/10811523.html 給自己出的題目 很重要
題目為:
在mongodb中需要先創(chuàng)建一個(gè) 管理用戶的用戶 vargo 密碼為 vargo123 分配給他的權(quán)限為root
在創(chuàng)建一個(gè)majihui的普通用戶 密碼為 majihui123 只對(duì) dbabd這個(gè)庫有只讀的權(quán)限

為了保持實(shí)驗(yàn)的可靠性,請(qǐng)重新安裝mongodb 完全干凈的進(jìn)行實(shí)驗(yàn)

接下來,我們創(chuàng)建一個(gè)用戶叫 
//在mongodb中需要先創(chuàng)建一個(gè) 管理用戶的用戶 vargo 密碼為 vargo123  分配給他的權(quán)限為root
在創(chuàng)建一個(gè)majihui的普通用戶 密碼為 majihui123 只對(duì) dbabd這個(gè)庫有只讀的權(quán)限
// 創(chuàng)建管理用戶用戶名為vargo,密碼vargo123
use admin
db.createUser(
    {
        user: "vargo",
        pwd: "vargo123",
        roles: [{ role: "root", db: "admin" }]
    }
)
實(shí)際操作為:
> use admin
switched to db admin
> db.createUser(
...     {
...         user: "vargo",
...         pwd: "vargo123",
...         roles: [{ role: "root", db: "admin" }]
...     }
... )
Successfully added user: {
        "user" : "vargo",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

接下來,我們關(guān)閉 mongodb 然后重啟mongodb 之后,然后進(jìn)行 用戶管理用戶驗(yàn)證 的開啟mongodb方式
[root@prd3-mysql-0-36 ~]# mongod -f /ivargo/app/mongodb/conf/mongo.conf --auth

vargo就是最高權(quán)限了

//接下來創(chuàng)建一個(gè)majihui的普通用戶 密碼為 majihui123 只對(duì) dbabd這個(gè)庫有只讀的權(quán)限
use admin
db.createUser(
    {
        user: "majihui",
        pwd: "majihui123",
        roles:[{role:"read",db:"dbabd"}],
        customData: { info: "user for dbabd" }
    }
)
實(shí)際操作
> use admin
switched to db admin
> db.createUser(
...     {
...         user: "majihui",
...         pwd: "majihui123",
...         roles:[{role:"read",db:"dbabd"}],
...         customData: { info: "user for dbabd" }
...     }
... )
Successfully added user: {
        "user" : "majihui",
        "roles" : [
                {
                        "role" : "read",
                        "db" : "dbabd"
                }
        ],
        "customData" : {
                "info" : "user for dbabd"
        }
}

我們來驗(yàn)證一下
[root@prd3-mysql-0-36 ~]# mongo
MongoDB shell version v4.0.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.2

use admin
switched to db admin
db.auWarning: unable to run listCollections, attempting to approximate collection names by parsing connectionStatus
db.auth('majihui','majihui123')
1
show dbs;
dbabd 0.000GB
use dbabd;
switched to db dbabd
show collections;
city
user_operation
db.city.find();
{ "_id" : ObjectId("5ce27f0484dc5c8b35081590"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("5ce27f1184dc5c8b35081591"), "title" : "redis 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("5ce27f1784dc5c8b35081592"), "title" : "mysql 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
db.user_operation.count();
1
//我們接下來 去嘗試的插入一個(gè)數(shù)據(jù)試一下
db.user_operation.insert({title: 'majihui 教程',
description: 'MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫',
by: '菜鳥教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 300
})
實(shí)際操作
db.user_operation.insert({title: 'majihui 教程',
... description: 'MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫',
... by: '菜鳥教程',
... url: 'http://www.runoob.com',
... tags: ['mongodb', 'database', 'NoSQL'],
... likes: 300
... })
WriteCommandError({
"ok" : 0,
"errmsg" : "not authorized on dbabd to execute command { insert: \"user_operation\", ordered: true, lsid: { id: UUID(\"441b14ee-ab6e-44c3-9b23-7640ceeb6b1f\") }, $db: \"dbabd\" }",
"code" : 13,
"codeName" : "Unauthorized"
})
出現(xiàn)報(bào)錯(cuò),正確
//我們接下來嘗試的去刪除一個(gè)文檔
db.user_operation.find();
{ "_id" : ObjectId("5ce27f4684dc5c8b35081593"), "title" : "mysql 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
db.user_operation.deleteMany( title : "mysql 教程");
2019-05-21T14:04:45.765+0800 E QUERY [js] SyntaxError: missing ) after argument list @(shell):1:36
//報(bào)錯(cuò),無法刪除,對(duì)了
db.user_operation.find();
{ "_id" : ObjectId("5ce27f4684dc5c8b35081593"), "title" : "mysql 教程", "description" : "MongoDB 是一個(gè) Nosql 數(shù)據(jù)庫", "by" : "菜鳥教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前題目:mongodb權(quán)限管理01-創(chuàng)新互聯(lián)
文章來源:http://muchs.cn/article34/dcpspe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、建站公司軟件開發(fā)、企業(yè)建站、營(yíng)銷型網(wǎng)站建設(shè)、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)