標籤:ase tom 完成 opera app state 插入資料 har spec
MongoDB資料庫預設是沒有使用者名稱及密碼的,即無許可權訪問限制。為了方便資料庫的管理和安全,需建立資料庫使用者。
使用者建立文法格式
{user: "<name>",pwd: "<cleartext password>",customData: { <any information> },roles: [{ role: "<role>",db: "<database>" } | "<role>",]}
- user欄位:使用者的名字;必填
- pwd欄位:使用者的密碼;必填
- cusomData欄位:為任意內容,例如可以為使用者全名介紹;
- roles欄位:指定使用者的角色,可以用一個空數組給新使用者設定空角色;必填
- roles 欄位,可以指定內建角色和使用者定義的角色。必填
#常用角色說明見官方文檔
https://docs.mongodb.com/manual/reference/built-in-roles/
許可權角色
飄紅為常用角色
read:允許使用者讀取指定資料庫
readWrite:允許使用者讀寫指定資料庫
dbAdmin:允許使用者在指定資料庫中執行管理函數,如索引建立、刪除,查看統計或訪問system.profile
userAdmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、刪除和系統管理使用者
clusterAdmin:只在admin資料庫中可用,賦予使用者所有分區和複製集相關函數的系統管理權限。
readAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀許可權
readWriteAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀寫權限
userAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的userAdmin許可權
dbAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的dbAdmin許可權。
root:只在admin資料庫中可用。超級帳號,超級許可權
建立超級管理員
管理所有資料庫,必須要進入到admin下建立(use admin),刪除時也要到相應的庫下操作
mongo#admin下建立使用者use admindb.createUser({user: "root",pwd: "root",roles: [ { role: "root", db: "admin" } ]})#test下建立使用者use testdb.createUser({user: "test",pwd: "test",roles: [ { role: "root", db: "test" } ]})#查看使用者show users;#刪除使用者> db.dropUser(‘root‘);true> show users;
驗證使用者存在性
#注:使用者建立完成後需在設定檔開啟auth驗證並重啟後生效。
vim /application/mongodb/conf/mongodb1.confsecurity: authorization: enabled
方法1
資料庫內驗證
> use adminswitched to db admin> db.auth("root","root");1#查看系統使用者表中資料,查看超管許可權只能在admin資料庫下進行
#所有使用者資訊都儲存在admin資料庫下的system.user中
> db.system.users.find().pretty()
{ "_id" : "admin.root", "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "9ed3ClyZPbThtzzDpqbg9w==", "storedKey" : "QdoewI/2uhUmwjJUbHoPSA+Cleo=", "serverKey" : "pC8yOq1gUaH7a+zIEycElPJINy0=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ]}
方法2
資料庫外驗證
[[email protected] ~]$ mongo -uroot -proot admin MongoDB shell version: 3.2.8connecting to: admin
定義指定資料庫許可權驗證 ,唯讀使用者
[[email protected] ~]$ mongo -utest -ptest test> db.createCollection(‘b‘); #建立表{ "ok" : 1 }> show tables; #顯示表b> db.b.insert({"2":"b"}) #插入資料WriteResult({ "nInserted" : 1 })> db.b.find().pretty();#格式化列印資料{ "_id" : ObjectId("5a4dd8d22a31eab1f0bbdc67"), "2" : "b" }> db.b.remove({})#刪除資料WriteResult({ "nRemoved" : 1 })> db.b.find().pretty();
建立對多個資料庫的讀寫權限
use appdb.createUser( { user: "app", pwd: "app", roles: [ { role: "readWrite", db: "app" }, { role: "read", db: "test" } ] })#app使用者登入測試
刪除使用者
刪除登入資料庫的使用者,需要先use 資料庫,再刪除它刪除app使用者:先登入到admin資料庫# mongo -uroot –proot 10.0.0.131/adminuse appdb.dropUser("app")
SQL語言與CRUD語言對照
MongoDB CRUD 操作 http://www.mongoing.com/docs/crud.html
schema
SQL Schema Statements |
MongoDB Schema Statements |
CREATE TABLE users ( id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30), age Number, status char(1), PRIMARY KEY (id) ) |
Implicitly created on first insert() operation. The primary key _idis automatically added if _id field is not specified. db.users.insert( { user_id: "abc123", age: 55, status: "A" } ) However, you can also explicitly create a collection: db.createCollection("users") |
ALTER TABLE users ADD join_date DATETIME |
在Collection 級沒有資料結構概念。然而在 document級,可以通過$set在 update操作添加列到文檔中。 db.users.update( { }, { $set: { join_date: new Date() } }, { multi: true } ) |
ALTER TABLE users DROP COLUMN join_date |
在Collection 級沒有資料結構概念。然而在 document級,可以通過$unset 在update操作從文檔中刪除列。 db.users.update( { }, { $unset: { join_date: "" } }, { multi: true } ) |
CREATE INDEX idx_user_id_asc ON users(user_id) |
db.users.createIndex( { user_id: 1 } ) |
CREATE INDEX idx_user_id_asc_age_desc ON users(user_id, age DESC) |
db.users.createIndex( { user_id: 1, age: -1 } ) |
DROP TABLE users |
db.users.drop() |
插入語句
SQL INSERT Statements |
MongoDB insert() Statements |
INSERT INTO users(user_id, age, status) VALUES ("bcd001", 45, "A") |
db.users.insert( { user_id: "bcd001", age: 45, status: "A" } ) |
查詢類
SQL SELECT Statements |
MongoDB find() Statements |
SELECT * FROM users |
db.users.find() |
SELECT id, user_id, status FROM users |
db.users.find( { }, { user_id: 1, status: 1, _id: 0 } ) |
SELECT user_id, status FROM users |
db.users.find( { }, { user_id: 1, status: 1 } ) |
SELECT * FROM users WHERE status = "A" |
db.users.find( { status: "A" } ) |
SELECT user_id, status FROM users WHERE status = "A" |
db.users.find( { status: "A" }, { user_id: 1, status: 1, _id: 0 } ) |
資料更新操作
SQL Update Statements |
MongoDB update() Statements |
UPDATE users SET status = "C" WHERE age > 25 |
db.users.update( { age: { $gt: 25 } }, { $set: { status: "C" } }, { multi: true } ) |
UPDATE users SET age = age + 3 WHERE status = "A" |
db.users.update( { status: "A" } , { $inc: { age: 3 } }, { multi: true } ) |
資料刪除操作
SQL Delete Statements |
MongoDB remove() Statements |
DELETE FROM users WHERE status = "D" |
db.users.remove( { status: "D" } ) |
DELETE FROM users |
db.users.remove({}) |
MongoDB簡單使用