Bagaimana saya bisa memasukkan Mongo sebagai pengguna super atau mengatur ulang pengguna?

29

Saya bermain-main dengan izin dan mengunci diri dari database Mongo. Saya cukup yakin saya melakukan ini dengan mencoba secara eksplisit menambahkan akses ke database tetapi saya menimpa hanya mengizinkan izin ke database. Jadi saya secara efektif terkunci dari basis data Mongo saya dan semua yang saya baca memberi tahu saya cara membuat pengguna super jika saya memiliki hak istimewa menambahkan pengguna. Saat ini saya tidak berpikir saya memiliki pengguna yang memiliki hak istimewa itu. Apakah ada cara untuk memasukkan database karena semua akses? Saya memiliki server dan memiliki akses root.

Tony
sumber

Jawaban:

38

Jika Anda telah mengunci diri maka Anda perlu melakukan hal berikut:

  1. Hentikan instance MongoDB Anda
  2. Hapus opsi --auth dan / atau --keyfile dari konfigurasi MongoDB Anda untuk menonaktifkan otentikasi
  3. Mulai instance tanpa otentikasi
  4. Edit pengguna sesuai kebutuhan
  5. Mulai ulang instance dengan otentikasi diaktifkan
daveh
sumber
Menghapus auth memang tidak cukup, terima kasih!
Andrei
14

Saya memiliki masalah serupa ketika saya membuat pengguna tanpa menambahkan superuser terlebih dahulu. Langkah-langkah berikut membantu menyelesaikan masalah:

  1. Buka file konfigurasi MongoDB menggunakan sudo( sudo vi mongodb.conf).
    File dapat ditemukan di /etc/folder.
  2. Komentar "auth = true".
  3. Hentikan layanan MongoDB ( sudo service mongod stop)
  4. Mulai layanan MongoDB ( sudo service mongod start)
  5. Lalu buat "root" superuser menggunakan perintah di bawah ini:

    use admin
    
    db.createUser({user:"admin",pwd:"password",roles:[{role:"root",db:"admin"}]});

    Untuk referensi https://docs.mongodb.com/manual/reference/built-in-roles/#superuser-roles

  6. Kembali dan batalkan komentar "auth=true". Berhenti dan Mulai / Mulai ulang layanan mongodb.

Divya Krishnan
sumber
Saya tidak bisa cukup berterima kasih. Saya sudah terjebak mencoba mencari tahu ini ketika saya mengunggah proyek ke server dev. Terima kasih banyak! :)
Woppi
Dito. Pesan kesalahan server secara spektakuler tidak membantu dalam hal ini. Terima kasih!
Tom
7

Jika Anda menggunakan set replika dengan akeyfile

Keamanan antara anggota set replika menggunakan Otentikasi Internal

Keyfile digunakan untuk auth dalam replikasi.

security:
  keyFile: <path-to-keyfile>
replication:
  replSetName: <replicaSetName>

Anda dapat menggunakan perintah ini untuk masuk sebagai admin ke mongod:

mongo -u __system -p "$(tr -d '\011-\015\040' < path-to-keyfile)" --authenticationDatabase local

Kata penutup Anda dapat membuat atau memodifikasi pengguna admin Anda.

Peran Internal

__systemMongoDB memberikan peran ini ke objek pengguna yang mewakili anggota cluster, seperti anggota set replika dan instance mongo. Peran memberi hak pemegangnya untuk mengambil tindakan terhadap objek apa pun dalam database.

Jangan berikan peran ini ke objek pengguna yang mewakili aplikasi atau administrator manusia, selain dari keadaan luar biasa.

Ivanov
sumber
Di mana Anda menemukan informasi ini?
octohedron
2

Periksa jawaban untuk pertanyaan ini, mereka mungkin bisa membantu

https://stackoverflow.com/questions/20117104/mongodb-root-user

Pada dasarnya jika Anda masih memiliki akses ke server, Anda mungkin dapat mengakses Admin database.

Masih ada lagi di halaman ini http://docs.mongodb.org/v2.4/reference/user-privileges/

Perhatikan bahwa versi 2.6 mengubah cara kerja ini sepenuhnya. Untuk 2.6, Anda harus menghabiskan lebih banyak waktu dengan http://docs.mongodb.org/manual/security/

Meligy
sumber
1
Seperti yang disebutkan dalam posting, itulah satu-satunya info yang dapat saya temukan. Saya tidak memiliki izin untuk melakukan itu
Tony
0

Anda harus menghentikan Mongo, menghapus file admin, lalu mulai Mongo

sudo service mongod stop
mv /data/admin.* .
sudo service mongod start
Tony
sumber
2
Ini menghancurkan basis data pengguna administratif dan memungkinkan akses melalui "localHostExcetption", ini bukan cara yang baik untuk mengelola pengguna ketika Anda memiliki masalah.
daveh