本文閱讀物件:
MongoDB權限設定不熟悉者
MongoDB開發者
其他對MongoDB感興趣的開發者
對技術感興趣的吃瓜群眾
MongoDB是一個基於分散式檔案存儲的資料庫,為目前主流的NoSQL資料庫,已被應用到許多高效能的大型系統中。如果之前從未接觸MongoDB,可以訪問MongoDB官網快速了解其主要特性及應用場景,如果英文水平確實有限,可以閱讀MongoDB百度百科進行了解,不過個人建議直接看英文資料,因為你遲早要去啃英文的技術資料。
此文範例的環境是基於CentOS 7.3 64位,MongoDB版本為3.2.4。
在伺服器上,以超級使用者權限執行yum安裝,指令如下:
[username@xxx]# su [username] -- username 为你登陆服务器的用户名 [username@xxx]# yum -y install mongodb-server mongodb 如果安装成功,你会得到如下类似的结果: Installed: mongodb-server.x86_64 0:2.6.12-4.el7 Complete!
找到MongoDB的安裝目錄
從上面的結果可以看出,mongo被安裝在目前/usr/bin下,進入該目錄。
[username@xxx]# find -name mongo /etc/sysconfig/mongod /usr/bin/mongod
新增設定mongodb.conf。將設定檔、資料及日誌檔案放在目錄/usr/local/mongodb下,同時在/usr/local/mongodb目錄下建立資料及日子目錄:data及logs
[username@xxx]# cd /usr/local [username@xxx]# mkdir mongodb [username@xxx]# cd mongodb [username@xxx]# mkdir data [username@xxx]# mkdir logs [username@xxx]# vi mongodb.conf 在打开的文件中添加以下内容,然后保存: dbpath = /usr/local/mongodb/data logpath = /usr/local/mongodb/logs/mongod.log port = 27017 fork = true nohttpinterface = true
啟動mongo服務
[username@xxx]# /usr/bin/mongod --config /usr/local/mongodb/mongodb.conf about to fork child process, waiting until server is ready for connections. forked process: 9516 child process started successfully, parent exiting
連接MongoDB
至此MongoDB已經安裝並啟動,並且在伺服器上能夠以客戶端的形式連接。
[username@xxx]# mongo 127.0.0.1:27017 MongoDB shell version: 2.6.12 connecting to: 127.0.0.1:27017/test Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user
建立一個root用戶,並賦予超級管理員權限(root),超級管理員可以管理MongoDB下的所有函式庫以及權限、備份及叢集等作業。 注意在下文程式碼區塊區域內,粗體部分為MongoDB shell的指令,斜體部分為執行shell指令之後的結果。
use admin switched to db admin db.createUser({user:"root", pwd: "123456", roles: ["root"]}) Successfully added user: { "user" : "root", "roles" : [ "root" ] }
為admin函式庫建立一個admin用戶,並賦予管理員權限。 <strong> </strong>
use admin switched to db admin db.createUser({user:"admin", pwd:"admin", roles: [{role:"userAdminAnyDatabase", db:"admin"}]}) Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ]}
#新建一個函式庫biz,加入一個使用者demo,密碼demo,並賦予讀寫及管理員權限。
use biz switched to db biz db.createUser({user:"demo", pwd:"demo", roles:["readWrite", "dbAdmin"]}) Successfully added user: { "user" : "demo", "roles" : [ "readWrite", "dbAdmin" ] }
認證建立的用戶,此步驟非常重要。認證完成之後,退出shell。
db.auth('demo', 'demo') 1 # 1 - 表示认证成功,0 - 表示失败 exit bye
修改設定檔/usr/local/mongodb/mongodb.conf,加入以下內容,然後儲存。 auth=true
殺死,並重啟服務
// 查看mongo进程信息 [username@xxx]# ps -def|grep mongo root 9516 1 0 15:08 ? 00:00:30 /usr/bin/mongod --config mongodb.conf root 9759 9614 0 16:55 pts/0 00:00:00 grep --color=auto mongo // 杀死进程 [username@xxx]# kill -4 9516 // 启动MongoDB [username@xxx]# /usr/bin/mongod --config /usr/local/mongodb/mongodb.conf about to fork child process, waiting until server is ready for connections. forked process: 9783 child process started successfully, parent exiting
show collections,將會提示驗證失敗訊息
not authorized for query on biz.system.namespaces。對應指令如下:
[username@xxx]# /usr/bin/mongo 127.0.0.1:27017/biz MongoDB shell version: 2.6.12 connecting to: 127.0.0.1:27017/biz show collections 2017-04-15T17:04:20.662+0800 error: { "$err" : "not authorized for query on biz.system.namespaces", "code" : 13 } at src/mongo/shell/query.js:131
show collections,同時建立集合users,並插入一條測試數據,發現可以得到正確的結果。
<br/>{ "_id" : ObjectId("58f1e4aff754011ea2e23238"), "name" : "aa" }<em></em>
[username@xxx]# /usr/bin/mongo 127.0.0.1:27017/biz -u demo -p demo MongoDB shell version: 2.6.12 connecting to: 127.0.0.1:27017/biz show collections db.users.insert({name:"aa"}) WriteResult({ "nInserted" : 1 }) db.users.find()
3. 資料庫設計那些事
###以上是主流的NoSQL資料庫--MongoDB權限設定的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!