Cara mengamankan MongoDB dengan nama pengguna dan kata sandi

377

Saya ingin mengatur otentikasi nama pengguna & kata sandi untuk instance MongoDB saya, sehingga setiap akses jarak jauh akan menanyakan nama pengguna & kata sandi. Saya mencoba tutorial dari situs MongoDB dan melakukan yang berikut:

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

Setelah itu, saya keluar dan berlari mongo lagi. Dan saya tidak perlu kata sandi untuk mengaksesnya. Bahkan jika saya terhubung ke database dari jarak jauh, saya tidak diminta untuk nama pengguna & kata sandi.


UPDATE Inilah solusi yang akhirnya saya gunakan

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

Nama pengguna & kata sandi akan bekerja dengan cara yang sama untuk mongodumpdan mongoexport.

murvinlai
sumber
4
ini untuk MongDB versi 2.2.x
Tom Imrei
22
Dalam Mongo 3.0.4 perintah untuk membuat pengguna adalah db.createUser () .
chronologos
4
Silakan ikuti ini untuk membuat pengguna admin di Mongodb 3.0 docs.mongodb.org/v3.0/tutorial/add-user-administrator
Sul Aga
3
Pembaruan untuk MongoDB 3.0+: Cara mengatur otentikasi di MongoDB 3.0 .
Dan Dascalescu
1
Untuk lebih jelasnya, ini tidak mengenkripsi byte yang melewati kawat. Ini hanya untuk kontrol akses.
Daniel F

Jawaban:

118

Anda harus mulai mongoddengan --authopsi setelah mengatur pengguna.

Dari Situs MongoDB:

Jalankan database (proses mongod) dengan --authopsi untuk mengaktifkan keamanan. Anda harus menambahkan pengguna ke admin db sebelum memulai server dengan --auth, atau menambahkan pengguna pertama dari antarmuka localhost.

Otentikasi MongoDB

Alexandru Petrescu
sumber
1
Saya sudah mencobanya dan mengikuti contohnya. sekarang .. saya bisa mengaturnya setelah saya me-restart server dengan --auth. Namun, ketika saya mencoba masuk (./mongo -u theadmin -p 12345) saya gagal. Saya tidak bisa masuk.
murvinlai
Jika setelah itu Anda tidak dapat terhubung, itu karena Anda mencoba untuk terhubung pada admindb, gunakan db lain dan coba lagi. Hanya userAdmin (AnyDatabase) yang dapat terhubung admin.
Vadorequest
80

Wow begitu banyak jawaban yang rumit / membingungkan di sini.

Ini pada v3.4 .

Jawaban singkat.

1) Mulai MongoDB tanpa kontrol akses.

mongod --dbpath /data/db

2) Hubungkan ke instance.

mongo

3) Buat pengguna.

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

4) Hentikan instance MongoDB dan mulai lagi dengan kontrol akses.

mongod --auth --dbpath /data/db

5) Hubungkan dan otentikasi sebagai pengguna.

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

Jawaban panjang: Baca ini jika Anda ingin memahami dengan baik.

Sangat sederhana. Saya akan bodoh berikut ini https://docs.mongodb.com/manual/tutorial/enable-authentication/

Jika Anda ingin mempelajari lebih lanjut tentang apa peran sebenarnya baca lebih lanjut di sini: https://docs.mongodb.com/manual/reference/built-in-roles/

1) Mulai MongoDB tanpa kontrol akses.

mongod --dbpath /data/db

2) Hubungkan ke instance.

mongo

3) Buat administrator pengguna. Berikut ini membuat administrator pengguna dalam admindatabase otentikasi. Pengguna adalah dbOwnerlebih dari some_dbdatabase dan BUKAN atas admindatabase, ini penting untuk diingat.

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

Atau jika Anda ingin membuat admin yang merupakan admin atas basis data apa pun:

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

4) Hentikan instance MongoDB dan mulai lagi dengan kontrol akses.

mongod --auth --dbpath /data/db

5) Hubungkan dan otentikasi sebagai administrator pengguna menuju admindatabase otentikasi, BUKAN ke some_dbdatabase otentikasi. Administrator pengguna dibuat dalam admindatabase otentikasi, pengguna tidak ada dalam some_dbdatabase otentikasi.

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

Anda sekarang diautentikasi sebagai dbOwnerlebih dari some_dbdatabase. Jadi sekarang jika Anda ingin membaca / menulis / melakukan hal-hal langsung ke some_dbbasis data Anda dapat mengubahnya.

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.

Lebih lanjut tentang peran: https://docs.mongodb.com/manual/reference/built-in-roles/

Jika Anda ingin membuat pengguna tambahan yang bukan administrator pengguna dan yang merupakan pengguna biasa lanjutkan membaca di bawah ini.

6) Buat pengguna normal. Pengguna ini akan dibuat dalam some_dbdatabase otentikasi di bawah.

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

7) Keluar dari mongo shell, sambungkan kembali, otentikasi sebagai pengguna.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
K - Toksisitas dalam SO meningkat.
sumber
2
Akhirnya saya mendapat ide apa yang sebenarnya terjadi.
mestarted
stackoverflow.com/questions/41615574/…
K - Keracunan dalam SO meningkat.
3
Saya mendapati diri saya berharap jawaban yang diterima dapat disegarkan di SO. Ini adalah solusi paling relevan pada Juli 2017.
azatar
1
Harap perbarui jawaban Anda! Saya tidak tahu dari mana Anda mendapat userAdminAnyDatabase dari tetapi tidak berhasil. Peran adalah root untuk akses admin ke semua dbs.
Aakash Verma
@AakashVerma docs.mongodb.com/manual/reference/built-in-roles/… ;) Juga TIDAK PERNAH MENGGUNAKAN ROOT kecuali untuk tujuan pengembangan di mana Anda tahu Anda tidak dapat dikompromikan! (tbh tidak pernah menggunakan root lol)
K - Toksisitas dalam SO tumbuh.
63

Pertama, #auth=truebatalkan komentar pada baris yang dimulai dengan file konfigurasi mongod Anda (jalur default /etc/mongo.conf). Ini akan mengaktifkan otentikasi untuk mongodb.

Kemudian, restart mongodb: sudo service mongod restart

Shnkc
sumber
10
jalur default /etc/mongod.conftidak/etc/mongo.conf
Mithril
2
atau, pertama batalkan komentar, lalu restart :)))
GioMac
2
Update: Sekarang restart layanan dengan: sudo service mongodb restart
sharafjaffri
lokasi dan nama file config adalah sebagai: /etc/mongodb.conf
HGMamaci
46

Jawaban ini untuk referensi Mongo 3.2.1

Terminal 1:

$ mongod --auth

Terminal 2:

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

jika Anda ingin menambahkan tanpa peran (opsional):

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

untuk memeriksa apakah dikonfirmasi atau tidak:

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

itu akan memberi Anda:

1

lain :

Error: Authentication failed.
0
Sdembla
sumber
2
versi yang lebih lama seperti 2.4 akan menggunakan db.addUser
arviman
Saya harus mengetik use adminsebelumnya createUserjika tidak memberikan kesalahan.
Guillaume F.
28

Berikut ini adalah kode javascript untuk menambahkan pengguna.

  1. Mulai mongoddengan--auth = true

  2. Akses database admin dari mongo shell dan berikan file javascript.

    admin mongo "Nama file.js"

    "Nama file.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. Sekarang penambahan pengguna selesai, kami dapat memverifikasi mengakses database dari mongo shell

Bharadvaj
sumber
1
Mengatur nama pengguna dan kata sandi dalam suatu file tidak terlihat sangat aman.
Menjelajahi
Javascript. Bukan "skrip java".
Camilo Martin
apa tujuan dari file javascript di sini?
Ravi
@CamiloMartin JavaScript, bukan "Javascript".
Madbreak
10

Pertama jalankan mongoDB pada terminal menggunakan

mongod

sekarang jalankan mongo shell gunakan perintah berikut

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

Mulai ulang instance MongoDB dengan kontrol akses.

mongod --auth

Sekarang otentikasi diri Anda dari baris perintah menggunakan

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

Saya membacanya dari

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

PRAVESH kumar
sumber
1
saya mendefinisikan pengguna, dengan root, lalu tambahkan lebih banyak dan lebih sampai saya menemukan Anda, 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" } ] }otentikasi masih gagal
deadManN
saya bahkan menggunakan db.changeUserPassword (), atau apa pun itu, bahkan setelah itu, ketika saya menelepon db.auth ('admin', 'my pass') atau cara Anda melakukannya, dikatakan otentikasi gagal untuk admin pengguna
deadManN
Gunakan rootperan untuk menyediakan akses ke operasi dan semua sumber daya dari peran berikut digabungkan ... peran root
Laode Muhammad Al Fatih
8

Inilah yang saya lakukan di Ubuntu 18.04:

$ 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
Jinmin
sumber
8

Anda bisa berubah /etc/mongod.conf.

Sebelum

#security:

Setelah

security:
    authorization: "enabled"

Kemudian sudo service mongod restart

deusxmachine
sumber
5

Ikuti langkah-langkah di bawah ini secara berurutan

  • Buat pengguna menggunakan CLI
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
  • Aktifkan otentikasi, bagaimana Anda melakukannya berbeda berdasarkan pada OS Anda, jika Anda menggunakan windows Anda dapat dengan mudah mongod --authdalam kasus linux Anda dapat mengedit /etc/mongod.conffile untuk menambahkan security.authorization : enableddan kemudian restart layanan mongd
  • Untuk terhubung melalui cli mongo -u "admin" -p "admin123" --authenticationDatabase "admin". Itu dia

Anda dapat memeriksa pos ini untuk melihat lebih detail dan mempelajari cara menghubungkannya menggunakan luwak.

rahil471
sumber
4

Pembuatan pengguna dengan kata sandi untuk basis data tertentu untuk mengamankan akses basis data:

use dbName

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

Langkah-langkah ini berhasil pada saya:

  1. tulis mongod --port 27017 pada cmd
  2. kemudian hubungkan ke mongo shell: mongo --port 27017
  3. buat admin pengguna: gunakan admin db.createUser ({user: "myUserAdmin", pwd: "abc123", peran: [{role: "userAdminAnyDatabase", db: "admin"}]})
  4. lepaskan shell mongo
  5. restart mongodb: mongod --auth --port 27017
  6. mulai mongo shell: mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
  7. Untuk mengautentikasi setelah tersambung, Hubungkan shell mongo ke mongod: mongo --port 27017
  8. beralih ke database otentikasi: gunakan admin db.auth ("myUserAdmin", "abc123"
Kevin Niasta
sumber
3

Praktik terbaik untuk terhubung ke mongoDB sebagai berikut:

  1. Setelah instalasi awal,

    use admin

  2. Kemudian jalankan skrip berikut untuk membuat pengguna admin

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

skrip berikut akan membuat pengguna admin untuk DB.

  1. masuk ke db.admin menggunakan

    mongo -u YourUserName -p YourPassword admin

  2. Setelah masuk, Anda dapat membuat nomor N database dengan kredensial admin yang sama atau berbeda dengan mengulangi angka 1 hingga 3.

Ini memungkinkan Anda membuat pengguna dan kata sandi berbeda untuk koleksi berbeda yang Anda buat di MongoDB

Balaji.JB
sumber
setelah ini pergi ke sudo nano /etc/mongod.conf dan letakkan baris ini security.authorization: diaktifkan, Anda dapat melihat tautan referensi di sini: stackoverflow.com/a/57384027/3904109
DragonFire
2

setelah Anda membuat pengguna baru, jangan lupa untuk grant read/write/rootmengizinkannya. Anda dapat mencoba

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

Haisheng Yu
sumber