MONGODB 权限认证
使用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 MTEST
?? ?switched to db MTEST
?? ?test1:PRIMARY> show tables;
?? ?app
?? ?system.indexes
?? ?test1:PRIMARY> db.app.find()
?? ?{ "_id" : 1, "name" : "app test" }
?? ?test1:PRIMARY> show dbs;
?? ?Mtest? 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'])
?? ??? ?Mtest_db = test_conn.Mtest
?? ??? ?cur_app = Mtest_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 角色是沒有讀寫數據庫功能的,這點和其它的數據庫權限有些不同。)
?
總結
以上是生活随笔為你收集整理的MONGODB 权限认证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MONGODB 2.6.8 的一个BUG
- 下一篇: MongoDB 从节点 延迟的测试