国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

MongoDB身份驗證--命令行模式

2024-04-27 15:07:16
字體:
來源:轉載
供稿:網友

摘要 MongoDB3.x與之前的版本有很大區別,這里簡單介紹一下用戶身份驗證相關內容。

1. 了解3.x版本添加用戶的函數 函數:

db.createUser(user,writeConcern);

參數: user這個文檔關于用戶身份認證和訪問的相關信息; writeConcern這個文檔描述MongoDB提供寫操作的相關信息。

user 文檔提供的格式: { user: “”, pwd: “”, customData: { }, roles: [ { role: “”, db: “” } | “”, … ]

user 文檔字段介紹: user:用戶名 pwd:密碼 roles:指定用戶的角色,可以用一個空數組給新用戶設定空角色; 在roles字段,可以指定內置角色和用戶定義的角色。

role里的角色可以選:

Built-In Roles(內置角色): 1. 數據庫用戶角色:read、readWrite; 2. 數據庫管理角色:dbAdmin、dbOwner、userAdmin; 3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 4. 備份恢復角色:backup、restore; 5. 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 6. 超級用戶角色:root // 這里還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase) 7. 內部角色:__system

角色釋義:

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

2.添加用戶

在安裝MongoDB完成后,啟動未啟用安全檢查的MongoDB服務,進入查看數據庫,只有一個local庫,admin庫是不存在的?,F在創建一個擁有授權權限的帳號,su,這里注意一下在哪個庫下創建的用戶必須要在那個庫下去驗證(auth)。MongoDB shell version: 3.2.3connecting to: test> use adminswitched to db admin> db.createUser({user:"su",pwd:"su", roles: [{ role: "userAdminAnyDatabase", db: "admin" }]});Successfully added user: {        "user" : "su",        "roles" : [                {                        "role" : "userAdminAnyDatabase",                        "db" : "admin"                }        ]}12345678910111213141234567891011121314

上面創建一個擁有 userAdminAnyDatabase 角色,用來管理用戶的用戶,可以通過這個角色來創建、刪除用戶。驗證時需要重新啟動MongoDB服務,加上–auth參數。

>mongod --auth ## 重啟MongoDB服務11

重新登錄:

MongoDB shell version: 3.2.3connecting to: test> show dbs; ## 這里因為沒有驗證,導致訪問失敗2016-04-27T14:34:44.573+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }", "code" : 13} :_getErrorWithCode@src/mongo/shell/utils.js:23:13Mongo.prototype.getDBs@src/mongo/shell/mongo.js:53:1shellHelper.show@src/mongo/shell/utils.js:700:19shellHelper@src/mongo/shell/utils.js:594:15@(shellhelp2):1:1>123456789101112131415123456789101112131415

因為在admin創建的用戶,在test下驗證所以失敗了

MongoDB shell version: 3.2.3connecting to: test> db.auth("su","su");                                                          ## 并不是在test中創建的用戶Error: Authentication failed.0> use admin                                                                    ## 切換到adminswitched to db admin> db.auth("su","su");1                                                                              ## 驗證成功>>> use test                                                                     ## 在test下創建用戶switched to db test> db.createUser({user:"mengximengxi",pwd:"mengximengxi", roles: ["read"]});    ## 只讀Successfully added user: { "user" : "mengximengxi", "roles" : [ "read" ] }     ## 默認為當前的數據庫> db.createUser({user:"mxmx",pwd:"mxmx", roles: ["readWrite"]});               ## 讀寫Successfully added user: { "user" : "mxmx", "roles" : [ "readWrite" ] }12345678910111213141516171234567891011121314151617

3.驗證

> use adminswitched to db admin> db.auth("su","su");1> db.test.find();                                                    ## 查看失敗,userAdminAnyDatabase 只是針對用戶的管理權限,并沒有對數據的操作權限Error: error: {        "ok" : 0,        "errmsg" : "not authorized on admin to execute command { find: /"test/", filter: {} }",        "code" : 13}> db.auth("mengximengxi","mengximengxi");1> db.test.insert({name:"zhaoxiaoliu"});                                  ## 只讀的,不能進行寫入操作WriteResult({        "writeError" : {                "code" : 13,                "errmsg" : "not authorized on test to execute command { insert: /"test/", documents: [ { _id: ObjectId('5720636a26c1f39ce9a7a9bd'), name: /"zhaoxiaoliu/" } ], ordered: true }"        }})> db.auth("mxmx","mxmx");                                                ## 可以進行寫操作1> db.test.insert({name:"zhaoxiaoliu"});WriteResult({ "nInserted" : 1 })>12345678910111213141516171819202122232425261234567891011121314151617181920212223242526

只有擁有root權限才既有授權權限,又有對集合操作的權限。

> db.createUser({user:"root",pwd:"root", roles: [{role:"root",db:"admin"}]});      ## 創建擁有超級權限的用戶Successfully added user: {        "user" : "root",        "roles" : [                {                        "role" : "root",                        "db" : "admin"                }        ]}> db.test.insert({name:"tianxiaoqi"});                                             ## 寫WriteResult({ "nInserted" : 1 })> db.createUser({user:"test_user",pwd:"mxmx", roles: ["readWrite"]}); Successfully added user: { "user" : "test_user", "roles" : [ "readWrite" ] }       ## 添加用戶1234567891011121312345678910111213

4.注意

1.可以在當前數據庫下去創建其他數據庫的用戶帳號,但是該帳號只能在當前數據庫下才能驗證通過,然后才能去操作對應的數據庫; 

2.安全檢查未開啟的情況下,在其他的數據庫創建對應的用戶也是可以的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 锦屏县| 西乌珠穆沁旗| 宝鸡市| 剑阁县| 南涧| 惠安县| 稻城县| 灵璧县| 赤水市| 略阳县| 和龙市| 巩留县| 耿马| 康乐县| 鸡泽县| 高雄县| 客服| 镇远县| 和林格尔县| 合阳县| 泸州市| 明光市| 方正县| 揭西县| 包头市| 长沙县| 文化| 长白| 伊春市| 涞源县| 扎囊县| 会理县| 汉川市| 保康县| 平和县| 自治县| 商洛市| 乌拉特前旗| 石首市| 陈巴尔虎旗| 辛集市|