MongoDB 基礎安全性(許可權操作)
和其他所有資料庫一樣,許可權的管理都差不多一樣。mongodb儲存所有的使用者資訊在admin 資料庫的集合system.users中,儲存使用者名稱、密碼和資料庫資訊。mongodb預設不啟用授權認證,只要能連線到該伺服器,就可連線到mongod。若要啟用安全認證,需要更改配置檔案引數auth。
以下測試理解
檢視資料庫:
> show dbs
發現 admin 竟然沒有!~
找了好久,找不到相關說明,於是直接建立使用者admin
-
use admin
-
db.createUser(
-
{
-
user: "admin",
-
pwd: "admin",
-
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
-
}
-
)
成功建立,再查詢admin中的集合,有資料了!
-
> show collections
-
system.indexes
-
system.users
-
system.version
檢視3個集合的資訊:
-
> db.system.users.find();
-
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "cFISfpbm04pmIFpqiL340g==", "storedKey" : "WG1DSEEEHUZUBjsjsnEA4RFVY2M=", "serverKey" : "9Lm+IX6l9kfaE/4C25/ghsQpDkE=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
-
>
-
> db.system.indexes.find();
-
{ "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "admin.system.version" }
-
{ "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "admin.system.users" }
-
{ "v" : 1, "unique" : true, "key" : { "user" : 1, "db" : 1 }, "name" : "user_1_db_1", "ns" : "admin.system.users" }
-
>
-
> db.system.version.find();
-
{ "_id" : "authSchema", "currentVersion" : 5 }
-
>
現在啟用 auth:
[[email protected] ~]# vi /etc/mongod.conf
auth=true
重啟 mongod 服務:
[[email protected] ~]# service mongod restart
直接預設登入,檢視集合,發現無權操作了:
[[email protected] ~]# mongo
-
[[email protected] ~]# mongo
-
MongoDB shell version: 3.0.2
-
connecting to: test
-
> show dbs
-
2015-05-09T21:57:03.176-0700 E QUERY Error: listDatabases failed:{
-
"ok" : 0,
-
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
-
"code" : 13
-
}
-
at Error (<anonymous>)
-
at Mongo.getDBs (src/mongo/shell/mongo.js:47:15)
-
at shellHelper.show (src/mongo/shell/utils.js:630:33)
-
at shellHelper (src/mongo/shell/utils.js:524:36)
-
at (shellhelp2):1:1 at src/mongo/shell/mongo.js:47
-
>
剛才在資料庫 admin 建立了一個賬戶 admin ,先到資料admin進來連線(其他db則失敗):
-
[[email protected] ~]# mongo
-
MongoDB shell version: 3.0.2
-
connecting to: test
-
>
-
> db.auth("admin","admin")
-
Error: 18 Authentication failed.
-
0
-
> use mydb
-
switched to db mydb
-
> db.auth("admin","admin")
-
Error: 18 Authentication failed.
-
0
-
> use admin
-
switched to db admin
-
> db.auth("admin","admin")
-
1
-
>
db.auth("admin","admin") 返回值為1,說明登入成功!~db.auth("admin","admin") 記錄是不存在的,執行完後這一行在shell中不會記錄歷史。
所以現在建立另一個使用者"myuser"
-
db.createUser(
-
{
-
user: "myuser",
-
pwd: "myuser",
-
roles: [ { role: "readWrite", db: "mydb" } ]
-
}
-
)
也可以增刪角色:
-
#授予角色:db.grantRolesToUser( "userName" , [ { role: "<role>", db: "<database>" } ])
-
db.grantRolesToUser( "myuser" , [ { role: "dbOwner", db: "mydb" } ])
-
#取消角色:db.grantRolesToUser( "userName" , [ { role: "<role>", db: "<database>" } ])
-
db.revokeRolesFromUser( "myuser" , [ { role: "readWrite", db: "mydb" } ])
因為在admin資料庫建立的,只能在 admin 資料庫中登入:
-
> db.auth("myuser","myuser")
-
Error: 18 Authentication failed.
-
0
-
>
-
> db
-
mydb
-
> use admin
-
switched to db admin
-
> db.auth("myuser","myuser");
-
1
-
>
此時是可以切換到所在的資料庫進行相關操作:
-
> use mydb
-
switched to db mydb
-
>
-
> db.tab.save({"id":999});
-
WriteResult({ "nInserted" : 1 })
-
>
-
> db.tab.find({"id":999});
-
{ "_id" : ObjectId("554ef5ac1b590330c00c7d02"), "id" : 999 }
-
>
-
> show collections
-
system.indexes
-
tab
-
>
在建立使用者時可以在其資料庫中建立,這樣不用每次都進入admin資料庫登入後再切換。如在資料庫"mydb"建立使用者"userkk"。
-
use admin
-
db.auth("admin","admin")
-
use mydb
-
db.createUser(
-
{
-
user: "userkk",
-
pwd: "userkk",
-
roles: [ { role: "dbOwner", db: "mydb" } ]
-
}
-
)
-
db.auth("userkk","userkk")
------------------------------------------------------------------------------------------------------------------
華麗分割
------------------------------------------------------------------------------------------------------------------
現在授權測試:
#先訪問到admin資料庫
-
use admin
-
db.auth("admin","admin")
#切換到 mydb ,在資料庫 mydb 中建立角色
#roles: 建立角色"testRole"在資料庫 "mydb" 中
#privileges: 該角色可檢視"find"資料庫"mydb"的所有集合
#db.dropRole("testRole")
-
use mydb
-
db.createRole({
-
role: "testRole",
-
privileges: [{ resource: { db: "mydb", collection: "" }, actions: [ "find" ] }],
-
roles: []
-
})
#在admin資料庫生成集合system.roles。檢視角色。
-
> use admin
-
switched to db admin
-
>
-
> show collections
-
system.indexes
-
system.roles
-
system.users
-
system.version
-
>
-
> db.system.roles.find();
-
{ "_id" : "mydb.testRole", "role" : "testRole", "db" : "mydb", "privileges" : [ { "resource" : { "db" : "mydb", "collection" : "" }, "actions" : [ "find" ] } ], "roles" : [ ] }
-
>
#回到mydb,在資料庫mydb中建立使用者並授予角色"testRole"
#db.dropUser("userkk")
-
use mydb
-
db.createUser(
-
{
-
user: "userkk",
-
pwd: "userkk",
-
roles: [ { role: "testRole", db: "mydb" } ]
-
}
-
)
退出mongodb,重新登入進行操作。發現只能使用find
>exit
-
[[email protected] ~]# mongo
-
MongoDB shell version: 3.0.2
-
connecting to: test
-
> use mydb
-
switched to db mydb
-
>
-
> db.auth("userkk","userkk")
-
1
-
>
-
> db.tab.find({"id":999})
-
{ "_id" : ObjectId("554ef5ac1b590330c00c7d02"), "id" : 999 }
-
>
-
> db.tab.insert({"id":1000})
-
WriteResult({
-
"writeError" : {
-
"code" : 13,
-
"errmsg" : "not authorized on mydb to execute command { insert: \"tab\", documents: [ { _id: ObjectId('554f145cdf782b42499d80e5'), id: 1000.0 } ], ordered: true }"
-
}
-
})
-
>
給角色 "testRole" 新增3個 “Privileges”許可權: "update", "insert", "remove"。再重新操作。
-
use admin
-
db.auth("admin","admin")
-
use mydb
-
#新增Privileges給角色
-
db.grantPrivilegesToRole("testRole",
-
[{ resource: { db: "mydb", collection: "" },actions: [ "update", "insert", "remove" ]}
-
])
-
exit #退出mongodb重新登入
-
use mydb
-
db.auth("userkk","userkk")
-
#增刪資料可以操作了!~
-
db.tab.insert({"id":1000})
-
db.tab.find({"id":1000})
-
db.tab.remove({"id":1000})
-
#此時admin的角色記錄為:
-
> db.system.roles.find();
-
{ "_id" : "mydb.testRole", "role" : "testRole", "db" : "mydb", "privileges" : [ { "resource" : { "db" : "mydb", "collection" : "" }, "actions" : [ "find", "insert", "remove", "update" ] } ], "roles" : [ ] }
-
>
#更改角色 roles,把roles值全部更新。同樣Privileges也可以更新替換!~
-
use admin
-
db.auth("admin","admin")
-
use mydb
-
db.updateRole("testRole",{ roles:[{ role: "readWrite",db: "mydb"}]},{ w:"majority" })
-
db.auth("userkk","userkk")
-
show dbs
相關推薦
MongoDB 基礎安全性(許可權操作)
和其他所有資料庫一樣,許可權的管理都差不多一樣。mongodb儲存所有的使用者資訊在admin 資料庫的集合system.users中,儲存使用者名稱、密碼和資料庫資訊。mongodb預設不啟用授權認證,只要能連線到該伺服器,就可連線到mongod。若要啟用安全認證,需要更改
Python基礎之(檔案操作)
一、檔案操作基本步驟: 一般需要經歷如下步驟: 開啟檔案 操作檔案 示例: #1. 開啟檔案,得到檔案控制代碼並賦值給一個變數 f=open('1.txt','r',encoding='utf-8') #預設開啟模式就為r #2. 通過控制代碼對檔案進行操作 data=f.r
MySQL基礎篇(資料操作)
續: 資料操作: 查詢表整體結構 :select * from 表名 增加: 全行(欄位)插入:insert 表名 values(各欄位對應的型別值) 預設插入: &nbs
Node基礎篇(檔案操作)
檔案操作 相關模組 Node核心提供了很多與檔案操作相關的模組,每個模組都提供了一些最基本的操作API,在NPM中也有社群提供的功能包 fs: 基礎的檔案操作 API path: 提供和路徑相關的操作 API readline: 用於讀取大文字檔案,一行一行讀 fs-extra(第三方): https://w
php操作MongoDB基礎教程(連線、新增、修改、刪除、查詢)
舊版本mongo例項化用:new Mongo(); 新mongo例項化 <?php $m = new MongoClient(); // 連線 $db = $m->selectDB("example"); ?> //連線localhost:2701
MongoDB基礎知識(一)
解決方案 互聯網 我們很好 數據庫 基礎知識 互聯網行業的發展非常的迅速,數據存儲以及架構優化方面也有很多不同的解決方案,例如關系型數據庫、非關系型數據庫、數據倉庫技術等。更多數據庫類產品的出現,為我們很好的解決了數據存儲的問題,例如Redis緩存,MySQL關系型數據庫,MongoDB
Mongodb基礎實踐(二)
數據庫查詢 表達式 where 技術 文章 在前面的文章裏面主要介紹了MongoDB的文檔,集合,數據庫等操作和對文檔的增、刪、改相關知識,接下來會總結一點有關查詢的相關知識。 在MySQL中,我們知道數據查詢是優化的主要內容,讀寫分離等技術都是可以用來處理數據庫查詢優化的,足以見數
Python學習基礎筆記——modules(模組操作)
modules(模組) 1.引入模組,例如math模組 import math root=math.sqrt(36) flr=math.floor(89.9) print(root) print(flr) 6.0 89.0 2.給模組的名字賦予簡稱,之後都可以使用簡稱 im
python3基礎07(程序操作及執行系統級命令等)
#subprocess 建立子程序 連線輸入 輸出 管道錯誤,及獲取他們的狀態,可執行作業系統級的命令# subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False,#
linux基礎篇(十二):Redhat7系統中rpm的相關操作與第三方軟體庫的搭建與共享
RPM RPM是Red-Hat Package Manager(RPM軟體包管理器)的縮寫,這一檔案格式名稱雖然打上了RedHat的標誌,但是其原始設計理念是開放式的,現在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分發版本都
MongoDB基礎教程(一)
1。連線mongodb cmd進入mongo/bin目錄下,輸入: mongo 2。建立資料庫 如果資料庫不存在建立資料庫,否則開啟該資料庫。 use 資料庫名 EG:建立資料庫runoob use runoob 建立並檢視當前使用的資
Python基礎(檔案操作)
檔案讀取: 1 #檔案讀取方式一 2 f=open("a.txt","r+",encoding="utf8") 3 data=f.read() 4 print(data) 5 f.close() 6 7 #檔案讀取方式二 8 with open("a.txt","r+",encodi
MongoDB二(資料庫操作)
經過上一篇文章的介紹,大家已經成功安裝MongoDB了,現在來讓我們建立MongoDB的資料庫吧。 可能會出現的問題:安裝完成之後再命令列執行mongod命令可能會出現錯誤,這個問題只需要在一個盤的根目錄下新建一個目錄名為data,在data目錄下新建名為db
MongoDB三(集合操作)
一、 建立集合 在MongoDB中,建立集合採用db.createCollection(name, options)方法。 在該命令中,name是所要建立的集合名稱。options是一個用來指定集合
spark連線mongodb(許可權認證)示例
final String mgohost = "127.0.0.1"; SparkSession spark = SparkSession.builder() .appN
藍橋杯-- 基礎練習 十六進位制轉八進位制(大數操作)
基礎練習 十六進位制轉八進位制 時間限制:1.0s 記憶體限制:512.0MB 問題描述 給定n個十六進位制正整數,輸出它們對應的八進位制數。 輸入格式 輸入的第一行為一個正整數n (1<=n<=10)。 接下來n
Mongodb基礎入門(3)——排序和索引
今天繼續Mongodb,簡單的記錄下其排序和索引的使用。 在Mongodb中使用sort()方法對資料進行排序。 命令格式:db.collectionName.find().sort({key:引數
MongoDB(java操作)
一、 準備工作 MongoDB與java連線需要相應驅動,可用maven新增相應依賴: <dependencies> <dependency> <groupId>org.mongo</gro
Apache Flink 零基礎入門(十八)Flink windows和Time操作
Time型別 在Flink中常用的Time型別: 處理時間 攝取時間 事件時間 處理時間 是上圖
vector最最最基礎用法(非原創)
sort排序 兩個 src per pre 開始 程序 -1 logs 在c++中,vector是一個十分有用的容器,下面對這個容器做一下總結。 1 基本操作 (1)頭文件#include<vector>. (2)創建vector對象,vector<int