MongoDB Sharded Cluster Yetkilendirmenin Etkinleştirilmesi
MongoDB kurulduktan sonra varsayılan olarak yetkilendirme (authentication) etkinleştirilmemiş şekilde gelir, kullanıcılar kullanıcı adı/parola ve yetki seviyesindeki veri tabanlarını belirtmeye gerek duymadan giriş yapabilirler. Yetkilendirme, güvenlik için son derece önemlidir ve etkinleştirilmesi gerekir.
Etkinleştirme işlemi için sırasıyla aşağıdaki adımlar uygulanmalıdır (Sunucu Centos Linux 7, MongoDB sürümü 3.2’dir):
- Öncelikle openssl ile bir anahtar dosyası oluşturulur, bağlantı ve sunucular arası iletişim için bu dosyayı kullanacaktır.
[mongodb@mongodb1 ~]$ cd /mongodb [mongodb@mongodb1 ~]$ mkdir keyfile [mongodb@mongodb1 ~]$ openssl rand -base64 346 > keyfile/mongodb-keyfile [mongodb@mongodb1 ~]$ chmod 600 keyfile/mongodb-keyfile
- Oluşturulan bu dosya, tüm sunucuların ilgili dizinine kopyalanır. Tüm sunuculardaki anahtar dosyası aynı olmalıdır.
- Tüm mongod ve mongos işlemleri, bu keyfile kullanılarak tekrar açılır. Komutlara –keyfile <dosya_yolu> şeklinde parametre verilir. Aşağıda örnek mongod (config, shard) ve mongos (router) işlemleri için örnek komutlar bulunmaktadır.
[mongodb@mongodb1 ~]$ mongod --configsvr --dbpath cfg0 --port 26001 --fork --logpath logs/log.cfg0 --logappend --keyFile keyfile/mongodb-keyfile [mongodb@mongodb1 ~]$ mongod --shardsvr --replSet shA --dbpath shA0 --logpath logs/log.shA0 --port 27500 --fork --logappend --keyFile keyfile/mongodb-keyfile [mongodb@mongodb1 ~]$ mongos --configdb mongodb1:26001,mongodb2:26001,mongodb3:26001 --fork --logappend --logpath logs/log.mongos0 --keyFile keyfile/mongodb-keyfile
- Yetkilendirme etkinleştirmenin bir sonraki adımı yönetici hesabı oluşturmaktır.
[mongodb@mongodb1 ~]$ mongo mongos> use admin mongos> db.createUser( { user: "adminUser", pwd: "parola", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db:"admin" }, { role: "clusterAdmin", db:"admin" } ] } )
- Aşağıdaki komutla kullanıcının durumu görülebilir.
mongos> db.getUser("adminUser")
- Bundan sonraki mongos girişlerinde yetkilendirme yaparak girmek gerekmektedir, yoksa hata alırsınız.
[mongodb@mongodb1 ~]$ mongo --port 27017 -u adminUser -p parola --authenticationDatabase admin