MongoDB安裝完成後,默認是沒有權限驗證的,默認是不須要輸入用戶名密碼便可登陸的,可是每每數據庫方面咱們會出於安全性的考慮而設置用戶名密碼。
即任何客戶端均可以使用mongo IP:27017/admin命令登陸mongo服務
啓用訪問控制前,請確保在 admin 數據庫中擁有 userAdmin 或 userAdminAnyDatabase 角色的用戶。
該用戶能夠管理用戶和角色,例如:建立用戶,授予或撤銷用戶角色,以及建立或修改定義角色。
啓用驗證的方式:
1. /etc/mongodb.conf //將auth=true前面的註釋拿掉,而後重啓服務生效。
2.線上生產環境使用的是docker:
a. 須要在config和shard服務的啓動命令中加上「--auth」參數。
b. 須要在宿主機生成一個keyfile文件:openssl rand -base64 755 > mongo.key,
分別放在mongos、config和shard目錄中,並修改目錄權限:chown -R 999:999 mongos 和keyfile權限:chmod 600 mongos/mongo.key
c. 在config和shard和mongos服務啓動命令中添加「--keyFile /data/db/mongo.key」參數。mongodb
1. mongodb是沒有默認管理員帳號,因此要先添加管理員帳號,在開啓權限認證。
2. 切換到admin數據庫,添加的帳號纔是管理員帳號。
3. 用戶只能在用戶所在數據庫登陸,包括管理員帳號。
4. mongo的用戶是以數據庫爲單位來創建的,每一個數據庫有本身的管理員。
5. 管理員能夠管理全部數據庫,可是不能直接管理其餘數據庫,要先在admin數據庫認證後才能夠。
注:賬號是跟着庫走的,因此在指定庫裏受權,必須也在指定庫裏驗證docker
權限說明數據庫
權限具體說明緩存
1.建立 adminui
角色:userAdminAnyDatabase (這是一個帳號管理員的角色)
admin用戶用於管理帳號,不能進行關閉數據庫等操做,目標數據庫是admin
user:用戶名
pwd:密碼
roles:指定用戶的角色,能夠用一個空數組給新用戶設定空角色;在roles字段,能夠指定內置角色和用戶定義的角色。
2.建立root
建立完admin管理員,建立一個超級管理員 root 角色:root
root角色用於 關閉數據庫 db.shutdownServer()
當帳號管理員和超級管理員,能夠爲本身的數據庫建立用戶了
(坑)這時候必定,必定要切換到所在數據庫上去建立用戶,否則建立的用戶仍是屬於admin。
查看全局全部帳戶 :
查看當前庫下的帳戶 :
根據id刪除用戶:
根據用戶名刪除用戶:
注:對於分片集羣,用戶的更改將在命令運行的 mongos 上即時生效。可是,對於羣集中的其餘mongos 實例,用戶緩存可能會等待10分鐘才能刷新。
1. 撤銷角色使用db.revokeRolesFromUser()方法撤銷角色。如下示例操做從account數據庫上刪除用戶reportsUser 的 readWrite 角色:use reporting
3. 更改密碼:
將用戶的用戶名和新密碼傳遞給db.changeUserPassword()方法。
如下操做將reporting用戶的密碼更改成:SOh3TbYhxuLiW8ypJPxmt1oOfL
=============================================================================================
登錄命令
mongo -u dba -p dba --authenticationDatabase "admin" mongo -host 192.168.3.17 --port 27017 -u dba -p dba --authenticationDatabase "admin" mongo 192.168.3.17:27017/admin db.auth("dba","dba") //此爲在庫內驗證登陸命令
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() #查看當前使用的數據庫,也能夠直接用db
> db.stats() #顯示當前db狀態
> db.version() #當前db版本
> db.getMongo() #查看當前db的連接機器地址
> db.serverStatus() #查看數據庫服務器的狀態
查看分片結果:
db.printShardingStatus()
測試:向test數據庫的user表中添加10w條數據:use testfor(var i=0;i<100000;i++){db.user.insert({"name":"test"+i,"age":i});}