環境
mongodb 3.4
window7 MongoDB常用命令
[root@snails ~]# ps -ef|grep mongod[root@snails ~]# mongo --host=127.0.0.1 --port=27017MongoDB shell version: 3.2.7connecting to: 127.0.0.1:27017/test> 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() #查看資料庫伺服器的狀態
需求
MongoDB安裝完成後,預設是不需要輸入使用者名稱密碼即可登入的,但是往往資料庫方面我們會出於安全性的考慮而設定使用者名稱密碼,本篇文章主要介紹了MongoDB添加管理員/普通使用者的方法。 使用者權限設定 網上總結了四條 MongoDB是沒有預設管理員帳號,所以要先添加管理員帳號,再開啟許可權認證。 切換到admin資料庫,添加的帳號才是管理員帳號。 使用者只能在使用者所在資料庫登入,包括管理員帳號。 管理員可以管理所有資料庫,但是不能直接管理其他資料庫,要先在admin資料庫認證後才可以。 建立管理員帳號
In the admin database, add a user with the userAdminAnyDatabase role.
For example, the following creates the user myUserAdmin in the admin
database:
在admin資料庫中,添加一個使用者並賦予userAdminAnyDatabase角色。
例如,下面是在admin資料庫中建立一個名為myUserAdmin使用者。
注意: The database where you create the user (in this example, admin) is the user’s authentication database. Although the user would authenticate to this database, the user can have roles in other databases; i.e. the user’s authentication database does not limit the user’s privileges.
注意:你建立使用者的這個資料庫(這裡就是admin資料庫)是使用者認證資料庫。
儘管使用者是在這個資料庫認證,而使用者又有其他資料庫的角色;即,使用者認證資料庫不限制使用者權限。
在window管理員下啟動cmd,並且串連上mongodb,
串連命令:
D:\Program Files\MongoDB\Server\3.4\bin>mongo.exe
建立使用者命令:
use admindb.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })#結果Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ]}
執行以下命令,看看結果
> show users> db.system.users.find()
開啟許可權驗證
window中:
D:\Program Files\MongoDB\Server\3.4\mongod.cfg
這個設定檔是我自己手動設定,關於mongodb配置,可以參考:
mongodb3.4的安裝和配置
在設定檔中添加.
security: authorization: enabled
全部配置:
systemLog: destination: file path: D:\mongodbdata\log\mongod.log logAppend: truestorage: journal: enabled: true dbPath: D:\mongodbdata\dbnet: bindIp: 127.0.0.1 port: 27017security: authorization: enabled
liunx:
[root@snails ~]# echo "auth = true" >> /root/mongodb/bin/mongodb.conf[root@snails ~]# systemctl restart systemd-mongodb
接著就是重啟mongod執行個體。說明了就是重啟mongodb服務。 驗證許可權是否生效
D:\Program Files\MongoDB\Server\3.4\bin>mongo.exeMongoDB shell version v3.4.1connecting to: mongodb://127.0.0.1:27017MongoDB server version: 3.4.1> use adminswitched to db admin> db.auth('myUserAdmin', 'abc123')1> show dbsadmin 0.000GBlocal 0.000GB
添加普通使用者
Once authenticated as the user administrator, use db.createUser() to create additional users. You can assign any built-in roles or user-defined roles to the users.
一旦經過認證的使用者管理員,可以使用db.createUser()去建立額外的使用者。
你可以分配mongodb內建的角色或使用者自訂的角色給使用者。
The myUserAdmin user only has privileges to manage users and roles. As myUserAdmin, if you attempt to perform any other operations, such as read from a foo collection in the test database, MongoDB returns an error.
這個myUserAdmin使用者僅僅只有特權去系統管理使用者和角色,myUserAdmin,如果你試圖執行其他任何操作,例如在test資料庫中的foo集合中去讀資料,mongodb將返回錯誤。
注意:The database where you create the user (in this example, test) is that user’s authentication database. Although the user would authenticate to this database, the user can have roles in other databases; i.e. the user’s authentication database does not limit the user’s privileges.
你建立使用者的資料庫(這裡就是test資料庫)是該使用者認證資料庫。儘管使用者認證是這個資料庫,使用者依然可以有其他資料庫的角色。即使用者認證資料庫不限制使用者權限。
建立普通使用者:
>use test> db.createUser(... {... user:"test1",... pwd: "test1",... roles: [{ role: "readWrite", db: "test"}]... }... )Successfully added user: { "user" : "test1", "roles" : [ { "role" : "readWrite", "db" : "test" } ]}> exitbyeD:\Program Files\MongoDB\Server\3.4\bin>mongo.exeMongoDB shell version v3.4.1connecting to: mongodb://127.0.0.1:27017MongoDB server version: 3.4.1> use testswitched to db test> db.auth('test1','test1')1
建立超極使用者root
window中的cmd中執行:
use admindb.createUser( { user: "root", pwd: "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資料庫中可用。超級帳號,超級許可權
官網參考地址:
http://docs.mongoing.com/manual-zh/tutorial/enable-authentication.html
如何對MongoDB 3.2.7進行使用者權限管理配置
MongoDB學習筆記—許可權管理