MongoDB'yi kullanıcı adı ve şifre ile nasıl emniyet altına alabilirim?


376

MongoDB örneğim için kullanıcı adı ve parola kimlik doğrulaması ayarlamak istiyorum, böylece herhangi bir uzaktan erişim kullanıcı adı ve parola isteyecektir. MongoDB sitesinden öğretici denedim ve aşağıdakileri yaptım:

use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');

Bundan sonra tekrar çıkıp mongoyu koştum. Erişmek için şifreye ihtiyacım yok. Veritabanına uzaktan bağlansam bile, kullanıcı adı ve parola girmem istenmiyor.


GÜNCELLEME İşte kullandığım çözüm

1) At the mongo command line, set the administrator:

    use admin;
    db.addUser('admin','123456');

2) Shutdown the server and exit

    db.shutdownServer();
    exit

3) Restart mongod with --auth

  $ sudo ./mongodb/bin/mongod --auth --dbpath /mnt/db/

4) Run mongo again in 2 ways:

   i) run mongo first then login:

        $ ./mongodb/bin/mongo localhost:27017
        use admin
        db.auth('admin','123456');

  ii) run & login to mongo in command line.

        $ ./mongodb/bin/mongo localhost:27017/admin -u admin -p 123456

Kullanıcı adı ve şifre için aynı şekilde çalışacaktır mongodumpve mongoexport.


4
MongDB sürüm 2.2.x için bu
Tom Imrei

22
Mongo 3.0.4'te kullanıcı oluşturma komutu db.createUser () şeklindedir .
chronologos

4
Mongodb 3.0'da yönetici kullanıcı oluşturmak için lütfen bunu izleyin docs.mongodb.org/v3.0/tutorial/add-user-administrator
Sul Aga

3
MongoDB 3.0+ için bir güncelleştirme: MongoDB 3.0'da kimlik doğrulaması nasıl ayarlanır .
Dan Dascalescu

1
Sadece açık olmak gerekirse, bu telden geçen baytları şifrelemez. Sadece erişim kontrolü içindir.
Daniel F

Yanıtlar:


117

Sen başlamak gerekir mongodile --authkullanıcıyı kurduktan sonra seçeneği.

MongoDB Sitesinden:

--authGüvenliği etkinleştirme seçeneği ile veritabanını (mongod işlemi) çalıştırın . Sunucuyu başlatmadan önce admin db'ye bir kullanıcı eklemiş olmanız --authveya localhost arabiriminden ilk kullanıcıyı eklemeniz gerekir.

MongoDB Kimlik Doğrulaması


1
Bunu denedim ve örneği takip ettim. Şimdi ... sunucuyu --auth ile yeniden başlattıktan sonra ayarlayabilirim. Ancak, giriş yapmaya çalıştığımda (./mongo -u theadmin -p 12345) başarısız olurum. Giriş yapamıyorum.
murvinlai

Eğer bundan sonra bağlantı adminkuramadıysanız, db'ye bağlanmaya çalışıyorsanız , başka bir db kullanın ve tekrar deneyin. Yalnızca bir userAdmin (AnyDatabase) bağlanabilir admin.
Vadorequest

80

Vay burada çok karmaşık / kafa karıştırıcı cevaplar.

Bu v3.4 itibariyle .

Kısa cevap.

1) MongoDB'yi erişim kontrolü olmadan başlatın.

mongod --dbpath /data/db

2) Örneğe bağlanın.

mongo

3) Kullanıcıyı oluşturun.

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

4) MongoDB örneğini durdurun ve erişim kontrolü ile yeniden başlatın.

mongod --auth --dbpath /data/db

5) Bağlayın ve kullanıcı olarak kimlik doğrulaması yapın.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})

Uzun cevap: Düzgün anlamak istiyorsanız bunu okuyun.

Gerçekten çok basit. Aşağıdakileri aptal hale getireceğim https://docs.mongodb.com/manual/tutorial/enable-authentication/

Rollerin gerçekte ne yaptığı hakkında daha fazla bilgi edinmek isterseniz, burada daha fazla bilgi edinin: https://docs.mongodb.com/manual/reference/built-in-roles/

1) MongoDB'yi erişim kontrolü olmadan başlatın.

mongod --dbpath /data/db

2) Örneğe bağlanın.

mongo

3) Kullanıcı yöneticisini oluşturun. Aşağıdaki, adminkimlik doğrulama veritabanında bir kullanıcı yöneticisi oluşturur . Kullanıcı veritabanı dbOwnerüzerinde ve some_dbveritabanı üzerinde DEĞİL admin, bu hatırlamak önemlidir.

use admin
db.createUser(
  {
    user: "myDbOwner",
    pwd: "abc123",
    roles: [ { role: "dbOwner", db: "some_db" } ]
  }
)

Veya herhangi bir veritabanı üzerinden yönetici olan bir yönetici oluşturmak istiyorsanız:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

4) MongoDB örneğini durdurun ve erişim kontrolü ile yeniden başlatın.

mongod --auth --dbpath /data/db

5) Kullanıcı yöneticisi olarak adminkimlik doğrulama veritabanına değil , kimlik doğrulama veritabanına bağlanın ve kimlik some_dbdoğrulaması yapın. Kullanıcı yöneticisi adminkimlik doğrulama veritabanında oluşturuldu , kullanıcı some_dbkimlik doğrulama veritabanında yok.

use admin
db.auth("myDbOwner", "abc123")

Artık veritabanı dbOwnerüzerinden kimlik doğrulaması yapıyorsunuz some_db. Yani şimdi okumak / yazmak / doğrudan some_dbveritabanına doğru şeyler yapmak istiyorsanız bunu değiştirebilirsiniz.

use some_db
//...do stuff like db.foo.insert({x:1})
// remember that the user administrator had dbOwner rights so the user may write/read, if you create a user with userAdmin they will not be able to read/write for example.

Roller hakkında daha fazla bilgi: https://docs.mongodb.com/manual/reference/built-in-roles/

Kullanıcı yöneticisi olmayan ve yalnızca normal kullanıcılar olan ek kullanıcılar yapmak istiyorsanız, aşağıda okumaya devam edin.

6) Normal bir kullanıcı oluşturun. Bu kullanıcı some_dbaşağıdaki kimlik doğrulama veritabanında oluşturulacak .

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

7) Mongo kabuğundan çıkın, yeniden bağlanın, kullanıcı olarak kimlik doğrulaması yapın.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})

2
Sonunda gerçekten neler olduğu hakkında bir fikrim var.
mestarted


3
Kendimi kabul edilmiş cevapların SO'da yenilenmesini diliyorum. Bu, Temmuz 2017 itibarıyla en alakalı çözümdür.
azatar

1
Lütfen cevabınızı güncelleyin! Ben nereden userAdminAnyDatabase var bilmiyorum ama çalışmıyor. Rol, tüm dbs üzerinden yönetici erişimi için köküdür .
Aakash Verma

@AakashVerma docs.mongodb.com/manual/reference/built-in-roles/… ;) Ayrıca, ödün veremeyeceğinizi bildiğiniz geliştirme amaçları için ASLA KÖK KULLANMAYIN! (tbh sadece kök lol kullanmaz)
K - SO'daki toksisite büyüyor.

63

İlk olarak, #auth=truemongod yapılandırma dosyanızda başlayan satırın yorumunu kaldırın (varsayılan yol /etc/mongo.conf). Bu, mongodb için kimlik doğrulamayı etkinleştirecektir.

Ardından mongodb'u yeniden başlatın: sudo service mongod restart


10
varsayılan yol /etc/mongod.confdeğil/etc/mongo.conf
Mitril

2
veya önce
rahatsız et

2
Güncelleme: Şimdi servisi yeniden başlatın: sudo service mongodb restart
sharafjaffri

yapılandırma dosyasının yeri ve adı şu şekildedir: /etc/mongodb.conf
HGMamaci

46

Bu cevap Mongo 3.2.1 Referansı içindir

Terminal 1:

$ mongod --auth

Terminal 2:

db.createUser({user:"admin_name", pwd:"1234",roles:["readWrite","dbAdmin"]})

roller olmadan eklemek istiyorsanız (isteğe bağlı):

db.createUser({user:"admin_name", pwd:"1234", roles:[]})

doğrulanmış olup olmadığını kontrol etmek için:

db.auth("admin_name", "1234")

size vermelidir:

1

Başka :

Error: Authentication failed.
0

2
2.4 gibi eski sürümler db.addUser
arviman

Aksi takdirde bir hata verdi use adminönce yazmak zorunda kaldı createUser.
Guillaume F.

28

İşte kullanıcı eklemek için bir javascript kodu.

  1. Başlangıç mongodile--auth = true

  2. Mongo kabuğundan yönetici veritabanına erişin ve javascript dosyasını geçirin.

    mongo yöneticisi "Dosyaadı.js"

    "Filename.js"

    // Adding admin user
    db.addUser("admin_username", " admin_password");
    // Authenticate admin user
    db.auth("admin_username ", " admin_password ");
    // use  database code from java script
    db = db.getSiblingDB("newDatabase");
    // Adding newDatabase database user  
    db.addUser("database_username ", " database_ password ");
  3. Artık kullanıcı ekleme işlemi tamamlandı, mongo kabuğundan veritabanına erişildiğini doğrulayabiliriz


1
Bir dosyada kullanıcı adı ve parola belirlemek çok güvenli görünmüyor.
keşfetmek

JavaScript. "Java script" değil.
Camilo Martin

javascript dosyasının amacı nedir?
Ravi

@CamiloMartin JavaScript, "Javascript" değil.
Madbreaks


10

İlk çalıştırma mongoDB'yi terminal kullanarak

mongod

şimdi aşağıdaki komutları kullanarak mongo kabuğu kullanın

    use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

Erişim denetimiyle MongoDB örneğini yeniden başlatın.

mongod --auth

Şimdi komut satırından kendinizi doğrulayın

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

Onu okudum

https://docs.mongodb.com/manual/tutorial/enable-authentication/


1
i root ile bir kullanıcı tanımladı, sonra seni bulana kadar daha fazla eklemek, MongoDB Enterprise > db.system.users.find() { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SC RAM-SHA-1" : { "iterationCount" : 10000, "salt" : "k96PCEflidMY5seVju+gAw==", "s toredKey" : "CabQTnJtny7cv0wT5X8oX9QOn3A=", "serverKey" : "RJyCdnlIhyIfj2+d44L61 bYK+MU=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "dbAdmin", "db" : "admin" }, { "role" : "userAdmin", "db" : "admin" }, { "role" : "root", "db" : "admin" } ] }hala kimlik doğrulama başarısız
deadManN

Hatta db.changeUserPassword () veya herhangi bir şey, hatta bundan sonra, db.auth ('admin', 'benim pass') veya yaptığınız şekilde çağırdığınızda, kimlik doğrulaması kullanıcı yöneticisi için başarısız olduğunu söylüyor
deadManN

rootAşağıdaki rollerin operasyonlarına ve tüm kaynaklarına erişim sağlamak için rolü kullanın ... rol kökü
Laode Muhammad Al Fatih

8

Ubuntu 18.04'te yaptığım şey bu:

$ sudo apt install mongodb
$ mongo
> show dbs
> use admin
> db.createUser({  user: "root",  pwd: "rootpw",  roles: [ "root" ]  })  // root user can do anything
> use lefa
> db.lefa.save( {name:"test"} )
> db.lefa.find()
> show dbs
> db.createUser({  user: "lefa",  pwd: "lefapw",  roles: [ { role: "dbOwner", db: "lefa" } ]  }) // admin of a db
> exit
$ sudo vim /etc/mongodb.conf
auth = true
$ sudo systemctl restart mongodb
$ mongo -u "root" -p "rootpw" --authenticationDatabase  "admin"
> use admin
> exit
$ mongo -u "lefa" -p "lefapw" --authenticationDatabase  "lefa"
> use lefa
> exit

8

Değişebilirsin /etc/mongod.conf.

Önce

#security:

Sonra

security:
    authorization: "enabled"

Sonra sudo service mongod restart


5

Sırayla aşağıdaki adımları izleyin

  • CLI kullanarak kullanıcı oluşturma
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
  • Kimlik doğrulamayı etkinleştirin, nasıl yaptığınız işletim sisteminize bağlı olarak değişir, pencereler kullanıyorsanız mongod --authlinux durumunda /etc/mongod.confdosyayı eklemek için düzenleyebilir security.authorization : enabledve ardından mongd hizmetini yeniden başlatabilirsiniz
  • Cli ile bağlanmak için mongo -u "admin" -p "admin123" --authenticationDatabase "admin". Bu kadar

Dışarı kontrol edebilirsiniz Bu yayını daha detaya gitmek ve mongoose kullanarak ona bağlanma öğrenmek için.


4

Veritabanı erişimini güvenli hale getirmek için belirli bir veritabanı için şifre ile kullanıcı oluşturma:

use dbName

db.createUser(
   {
     user: "dbUser",
     pwd: "dbPassword",
     roles: [ "readWrite", "dbAdmin" ]
   }
)


3

Bu adımlar benim için çalıştı:

  1. mongod yazmak - port 27017 cmd üzerinde
  2. sonra mongo kabuğuna bağlanın: mongo --port 27017
  3. kullanıcı yöneticisini oluşturun: admin kullanın db.createUser ({kullanıcı: "myUserAdmin", pwd: "abc123", roller: [{role: "userAdminAnyDatabase", db: "admin"}]})
  4. mongo kabuğunun bağlantısını kes
  5. mongodb'u yeniden başlatın: mongod --auth --port 27017
  6. mongo kabuğunu başlat: mongo - port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
  7. Bağlandıktan sonra kimlik doğrulaması yapmak için, mongo kabuğunu mongod'a bağlayın: mongo - port 27017
  8. kimlik doğrulama veritabanına geçme: admin db.auth ("myUserAdmin", "abc123" kullanın

3

Aşağıdaki gibi mongoDB'ye bağlanmak için en iyi uygulama:

  1. İlk kurulumdan sonra,

    use admin

  2. Ardından yönetici kullanıcı oluşturmak için aşağıdaki komut dosyasını çalıştırın

    db.createUser( { user: "YourUserName", pwd: "YourPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "clusterAdmin", db: "admin" } ] })

Aşağıdaki komut dosyası, DB için yönetici kullanıcı oluşturur.

  1. kullanarak db.admin'e giriş yapın

    mongo -u YourUserName -p YourPassword admin

  2. Giriş yaptıktan sonra, 1 ila 3'ü tekrarlayarak aynı yönetici kimlik bilgisine veya farklı bir veritabanına N numarası oluşturabilirsiniz.

Bu, MongoDB'de oluşturduğunuz farklı koleksiyon için farklı kullanıcı ve şifre oluşturmanıza olanak tanır


Nano /etc/mongod.conf Sudo ve bu hat security.authorization koymak için bu halindeyken sonra: etkin, burada referans linki görebilirsiniz: stackoverflow.com/a/57384027/3904109
DragonFire

2

yeni kullanıcı oluşturduktan sonra lütfen kullanıcıya grant read/write/rootizin vermeyi unutmayın . deneyebilirsin

cmd: db.grantRolesToUser('yourNewUsername',[{ role: "root", db: "admin" }])

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.