使用mongoDB 是從2.4 版本開始的,但那時的許可權管理相對比較簡單。也就沒有去弄這個。
現在再回頭看幾個版本的許可權管理,看到各個版本間都在變化。
並且叢集與單機也有很大的不同,
下面是以2.6版本來簡單配置了一個環境進行測試。
建立一個叢集環境:
config={_id:'test1',members:[{_id:0,host:'192.168.2.113:27001',priority:10},{_id:1,host:'192.168.2.113:27002',priority:8}]}}
rs.initiate(config)
rs.addArb('192.168.2.113:27003')
配置兩個使用者:
use admin
#資料庫管理員
db.createUser({user:'admin',pwd:'123',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})
#系統管理員
db.createUser({user:'root',pwd:'123',roles:[{role:'root',db:'admin'}]})
#test
use test;
db.createUser({user:'tang',pwd:'123',roles:[{role:'userAdminAnyDatabase',db:'admin'},{role:'root',db:'admin'}]});
db.createUser({user:'test',pwd:'123456',roles:[{role:'dbAdmin',db:'test'}]})
#建立一個test 唯讀許可權使用者
db.createUser({user:'readonly',pwd:'123456',roles:[{role:'read',db:'test'}]})
#產生對 TEST 庫有讀寫權限的使用者
db.createUser({user:'user',pwd:'123',roles:[{role:'readWrite',db:'test'},{role:'dbAdmin',db:'test'}]})
#產生一個對所有庫都有讀寫的使用者
use admin;
db.createUser({user:'wang',pwd:'123',roles:[{role:'readWriteAnyDatabase',db:'admin'}]})
建立一個測試庫
use test
for (var i=1; i<=100; i++) {
mid=parseInt(i/100);
db.test.insert({_id:i,mid:mid,ts:new Date()});
};
#論證
test1:PRIMARY> use admin
test1:PRIMARY> db.auth('wang','123')
1
test1:PRIMARY> use test
switched to db test
test1:PRIMARY> db.test.find()
{ "_id" : 1, "mid" : 0, "ts" : ISODate("2016-03-23T06:43:59.625Z") }
{ "_id" : 2, "mid" : 0, "ts" : ISODate("2016-03-23T06:44:00.131Z") }
{ "_id" : 3, "mid" : 0, "ts" : ISODate("2016-03-23T06:44:00.132Z") }
test1:PRIMARY> use Mallcoo
switched to db Mallcoo
test1:PRIMARY> show tables;
app
system.indexes
test1:PRIMARY> db.app.find()
{ "_id" : 1, "name" : "app test" }
test1:PRIMARY> show dbs;
Mallcoo 0.078GB
登入:
./mongo -port 27001 -u 'li' -p '123' --authenticationDatabase test
#登入時加上認證的資料庫名稱如果是 *AnyDatabase 類的role,那就是admin 了。
#python test code
import pymongo
import datetime
#test read user
test_conn = pymongo.MongoClient('mongodb://readonly:123456@192.168.2.113:27001/admin')
test_db = test_conn.test
test_db.test.update({"_id":1},{"$set":{"mid":9999}})
#test_db.authenticate('li',password='123')
cur_test = test_db.test.find().limit(10)
for row in cur_test:
print 'id=%d,mid=%d'%(row["_id"],row['mid'])
Mallcoo_db = test_conn.Mallcoo
cur_app = Mallcoo_db.app.find()
for row in cur_app:
print 'id=%d,name=%s'%(row["_id"],row['name'])
#配置
1. #產生key 檔案
[mongo@localhost ~]$ openssl rand -base64 741 > /home/mongo/.ssh/mongodb_key --檔案內容采base64編碼
[mongo@localhost ~]$chmod 600 /home/mongo/.ssh/mongodb_key
2. 設定檔:(叢集節點都加上)
[mongo@localhost bin]$ cat rep_p.conf
dbpath=/mnt/mongodb/data2/v2_p/
logpath=/mnt/mongodb/log/v2_plog.log
port=27001
logappend=true
fork=true
replSet=test1
oplogSize=100
auth=true
keyFile=/home/mongo/.ssh/mongodb_key
3.#使用參數檔案啟動
./mongod -f rep_p.conf
mongodb3.0 版本比 2.6 版本增加了dbOwner 角色。
而mongodb 3.2 版本,又增加了clusterManager,clusterMonitor,hostManager,Back ,restore 等一些管理角色。
這也說明,mongodb的許可權管理功能,一直在進步。
( dbAdmin 角色是沒有讀寫資料庫功能的,這點和其它的資料庫許可權有些不同。)