標籤:zed dde database 驗證 alt 超級 資料庫服務 超級使用者 索引
一、Mongodb命令主要命令
show dbs #顯示資料庫列表 show collections #顯示當前資料庫中的集合(類似關聯式資料庫中的表)show users #顯示使用者use <db name> #切換當前資料庫,如果資料庫不存在則建立資料庫。 db.help() #顯示資料庫操作命令,裡面有很多的命令 db.foo.help() #顯示集合操作命令,同樣有很多的命令,foo指的是當前資料庫下,一個叫foo的集合,並非真正意義上的命令 db.foo.find() #對於當前資料庫中的foo集合進行資料尋找(由於沒有條件,會列出所有資料) db.foo.find( { a : 1 } ) #對於當前資料庫中的foo集合進行尋找,條件是資料中有一個屬性叫a,且a的值為1
MongoDB沒有建立資料庫的命令,但有類似的命令。 如:如果你想建立一個“myTest”的資料庫,先運行use
myTest命令,之後就做一些操作(如:db.createCollection(‘user’)),這樣就可以建立一個名叫“myTest”的資料庫。
其他命令
db.dropDatabase() #刪除當前使用資料庫db.cloneDatabase("127.0.0.1") #將指定機器上的資料庫的資料複製到當前資料庫db.copyDatabase("mydb", "temp", "127.0.0.1") #將原生mydb的資料複製到temp資料庫中db.repairDatabase() #修複當前資料庫db.getName() #查看當前使用的資料庫,也可以直接用dbdb.stats() #顯示當前db狀態db.version() #當前db版本db.getMongo() #查看當前db的連結機器地址db.serverStatus() #查看資料庫伺服器的狀態
二、建立系統管理權限1、需求
MongoDB安裝完成後,預設是不需要輸入使用者名稱密碼即可登入的,但是往往資料庫方面我們會出於安全性的考慮而設定使用者名稱密碼,本篇文章主要介紹了MongoDB添加管理員/普通使用者的方法。
- MongoDB是沒有預設管理員帳號,所以要先添加管理員帳號,再開啟許可權認證。
- 切換到admin資料庫,添加的帳號才是管理員帳號。
- 使用者只能在使用者所在資料庫登入,包括管理員帳號。
- 管理員可以管理所有資料庫,但是不能直接管理其他資料庫,要先在admin資料庫認證後才可以。
2、建立管理員賬戶
在 admin 資料庫中,添加一個使用者並賦予userAdminAnyDatabase
角色。
例如,下面是在 admin 資料庫中建立一個名為admin
使用者。
[[email protected] ~]# mongoMongoDB shell version: 3.2.6connecting to: test> use adminswitched to db admin> db.createUser(... {... user: "admin",... pwd: "abc123",... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]... }... )Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ]}>
3、查看使用者
> show users{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ]}>
> db.system.users.find(){ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "enbD/QBkAWDHurQp9h+RTA==", "storedKey" : "XeFFVoer/nm0iBeN/R7Z+L1GiSU=", "serverKey" : "w87cJMsQMOCrzcSaI44R9dGZvUY=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }>
三、開啟許可權驗證
編輯設定檔/etc/mongod.conf
,修改內容如下:
security: authorization: enabled
重啟mongodb服務
systemctl restart mongod
驗證許可權是否生效
[[email protected] ~]# mongoMongoDB shell version: 3.2.6connecting to: test> show dbs2018-08-01T10:57:13.168+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }", "code" : 13} :[email protected]/mongo/shell/utils.js:25:13[email protected]/mongo/shell/mongo.js:62:1[email protected]/mongo/shell/utils.js:760:19[email protected]/mongo/shell/utils.js:650:15@(shellhelp2):1:1> use adminswitched to db admin> db.auth(‘admin‘,‘abc123‘)1> show dbsadmin 0.000GBlocal 0.000GBmyTest 0.000GB>
四、建立普通使用者
一旦經過認證的使用者管理員,可以使用db.createUser()去建立額外的使用者。
你可以分配mongodb內建的角色或使用者自訂的角色給使用者。
這個admin使用者僅僅只有特權去系統管理使用者和角色,如果你試圖執行其他任何操作,例如在test資料庫中的foo集合中去讀資料,mongodb將返回錯誤。
你建立使用者的資料庫(這裡就是test資料庫)是該使用者認證資料庫。儘管使用者認證是這個資料庫,使用者依然可以有其他資料庫的角色。即使用者認證資料庫不限制使用者權限。
[[email protected] ~]# mongoMongoDB shell version: 3.2.6connecting to: test> use adminswitched to db admin> db.auth(‘admin‘,‘abc123‘)1> use testswitched to db test> db.createUser(... {... user:"test1",... pwd: "test1",... roles: [{ role: "readWrite", db: "test"}]... }... )Successfully added user: { "user" : "test1", "roles" : [ { "role" : "readWrite", "db" : "test" } ]}>
驗證
[[email protected] ~]# mongoMongoDB shell version: 3.2.6connecting to: test> use testswitched to db test> db.auth(‘test1‘,‘test1‘)1>
五、建立超級使用者root
[[email protected] ~]# mongoMongoDB shell version: 3.2.6connecting to: test> use adminswitched to db admin> db.auth(‘admin‘,‘abc123‘)1> db.createUser(... {... user: "root",... pwd: "root",... roles: [ { role: "root", db: "admin" } ]... }... )Successfully added user: { "user" : "root", "roles" : [ { "role" : "root", "db" : "admin" } ]}>
六、Mongodb資料庫角色內建的角色
資料庫使用者角色:read、readWrite;
資料庫管理角色:dbAdmin、dbOwner、userAdmin;
叢集管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
備份恢複角色:backup、restore;
所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超級使用者角色:root #這裡還有幾個角色間接或直接提供了系統超級使用者的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
內部角色:__system
角色說明:
Read:允許使用者讀取指定資料庫
readWrite:允許使用者讀寫指定資料庫
dbAdmin:允許使用者在指定資料庫中執行管理函數,如索引建立、刪除,查看統計或訪問system.profile
userAdmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、刪除和系統管理使用者
clusterAdmin:只在admin資料庫中可用,賦予使用者所有分區和複製集相關函數的系統管理權限。
readAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀許可權
readWriteAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀寫權限
userAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的userAdmin許可權
dbAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的dbAdmin許可權。
root:只在admin資料庫中可用。超級帳號,超級許可權
Mongodb使用者權限管理配置