MONGODB 許可權認證

來源:互聯網
上載者:User

使用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 角色是沒有讀寫資料庫功能的,這點和其它的資料庫許可權有些不同。)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.