Saya telah membuat pengguna admin untuk mongo menggunakan petunjuk ini:
http://docs.mongodb.org/manual/tutorial/add-user-administrator/
Dari klien mongo sepertinya saya dapat mengotentikasi:
> use admin
switched to db admin
> db.auth('admin','SECRETPASSWORD');
1
>
Tapi saya tidak bisa terhubung dengan cara lain. Sebagai contoh:
mongo -u admin -p SECRETPASSWORD
memberikan kesalahan:
JavaScript execution failed: Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:L228
Saya sudah auth = true
masuk etc/mongod.conf
.
Apa yang saya lewatkan?
db.changeUserPassword("admin", "password")
untuk mengubah kata sandi untuk setiap database.Jawaban:
Otentikasi dikelola di tingkat database. Ketika Anda mencoba untuk menyambung ke sistem menggunakan database, mongo sebenarnya memeriksa kredensial yang Anda berikan dalam koleksi
<database>.system.users
. Jadi, pada dasarnya saat Anda mencoba untuk menyambung ke "test", itu mencari kredensialtest.system.users
dan mengembalikan kesalahan karena tidak dapat menemukannya (karena disimpanadmin.system.users
). Memiliki hak untuk membaca dan menulis dari semua db tidak berarti Anda dapat langsung terhubung ke mereka.Anda harus terhubung ke database yang memegang kredensial terlebih dahulu. Mencoba:
Untuk info lebih lanjut, periksa http://docs.mongodb.org/manual/reference/privilege-documents/
sumber
Saya juga menerima kesalahan ini, yang saya butuhkan adalah menentukan database tempat data otentikasi pengguna disimpan:
Perbarui 18 November 2017:
adalah solusi yang lebih baik. Mongo akan meminta kata sandi Anda, dengan cara ini Anda tidak akan memasukkan kata sandi cleartext Anda ke dalam riwayat shell yang hanya merupakan praktik keamanan yang buruk.
sumber
Anda mungkin perlu mengupgrade shell mongo Anda. Saya memiliki versi 2.4.9 dari mongo shell secara lokal, dan saya mendapatkan kesalahan ini saat mencoba menyambung ke database mongo 3. Mengupgrade versi shell ke 3 menyelesaikan masalah.
sumber
Saya tahu ini mungkin tampak jelas tetapi saya juga harus menggunakan satu kutipan di sekitar u / n dan p / w sebelum berhasil
sumber
mongo -u <myuser> -p <mypasswd
tidak berfungsi. Mengapaadmin
membuat perbedaan di sini?Di MongoDB 3.0, sekarang mendukung beberapa mekanisme otentikasi.
Jika Anda memulai dengan database 3.0 baru dengan pengguna baru yang dibuat, mereka akan dibuat menggunakan SCRAM-SHA-1.
Jadi Anda membutuhkan driver yang mampu melakukan otentikasi itu:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#considerations-scram-sha-1-drivers
Jika Anda memiliki basis data yang ditingkatkan dari 2.x dengan data pengguna yang ada, mereka masih akan menggunakan MONGODB-CR, dan basis data otentikasi pengguna harus ditingkatkan:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram
Sekarang, menghubungkan ke MongoDB 3.0 dengan pengguna yang dibuat dengan SCRAM-SHA-1 diperlukan untuk menentukan basis data otentikasi (melalui baris perintah mongo klien), dan menggunakan mekanisme lain jika menggunakan driver.
$> mongo -u PENGGUNA -p PASSWORD --authenticationDatabase admin
Dalam hal ini, database "admin", yang juga merupakan default akan digunakan untuk otentikasi.
sumber
Pergi ke shell terminal dan ketik
mongo
.Lalu ketik
use db_name
.Kemudian ketik:
db.createUser( { user: "mongodb", pwd: "dogmeatsubparflavour1337", roles: [ { role: "dbOwner", db: "db_name" } ] } )
Juga coba:
db.getUsers()
const MongoClient = require('mongodb').MongoClient; // MongoDB Connection Info const url = 'mongodb://mongodb:[email protected]:27017/?authMechanism=DEFAULT&authSource=db_name'; // Additional options: https://docs.mongodb.com/manual/reference/connection-string/#connection-string-options // Use Connect Method to connect to the Server MongoClient.connect(url) .then((db) => { console.log(db); console.log('Casually connected correctly to server.'); // Be careful with db.close() when working asynchronously db.close(); }) .catch((error) => { console.log(error); });
sumber
mongo 'mongodb://localhost:27017/admin' -u admin -p
2. Kemudian beralih ke database target:> use targetDb
3. Kemudian tambahkan pengguna> db.createUser(...)
Ini muncul masalahnya adalah bahwa pengguna dibuat melalui metode yang dijelaskan dalam dokumen mongo tidak memiliki izin untuk menghubungkan ke database default (test), bahkan jika pengguna diciptakan dengan "userAdminAnyDatabase" dan peran "dbAdminAnyDatabase".
sumber
Kemungkinan lain: Saat Anda membuat pengguna, Anda mungkin secara tidak sengaja telah
use
membuat database selainadmin
, atau selain yang Anda inginkan. Anda perlu menyetel--authenticationDatabase
ke database tempat pengguna sebenarnya dibuat.mongodb
tampaknya menempatkan Anda dalamtest
database dengan default ketika Anda membuka shell, sehingga Anda akan perlu untuk menulis--authenticationDatabase test
daripada--authenticationDatabase admin
jika Anda secara tidak sengaja yanguse
ingtest
ketika Anda berlaridb.createUser(...)
.Dengan asumsi Anda memiliki akses ke mesin yang menjalankan instance mongodb, y dapat menonaktifkan otorisasi di
/etc/mongod.conf
(komentar keluarauthorization
yang bersarang di bawah keamanan), lalu mulai ulang server Anda, lalu jalankan:Dan Anda mungkin mendapatkan sesuatu seperti ini:
{ "_id" : "test.myusername", "user" : "myusername", "db" : "test", "roles" : [ { "role" : "dbOwner", "db" : "mydatabasename" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] }
Perhatikan bahwa
db
nilainya samatest
. Itu karena saat saya membuat pengguna, saya tidak menjalankanuse admin
atauuse desiredDatabaseName
. Jadi Anda dapat menghapus pengguna dengandb.dropUser("myusername")
dan kemudian membuat pengguna lain di bawah database yang Anda inginkan seperti:Mudah-mudahan itu membantu seseorang yang pernah berada di posisi saya sebagai noob dengan hal ini.
sumber
Ini adalah jenis kasus khusus, tetapi jika ada yang sampai di sini dengan masalah saya:
Di MongoHQ, ini akan menunjukkan kepada Anda bidang yang disebut "kata sandi", tetapi sebenarnya itu hanya hash kata sandi. Anda harus menambahkan pengguna baru dan menyimpan kata sandi di tempat lain (karena MongoHQ tidak akan menunjukkannya kepada Anda).
sumber
Cara yang tepat untuk login ke mongo shell adalah
mongo localhost: 27017 -u 'uuuuu' -p '> xxxxxx' --authenticationDatabase dbname
sumber
Anda juga dapat mencoba ini: -
mongo localhost:27017/admin -u admin -p SECRETPASSWORD
Temukan di posting ini
Di sini jelas localhost bisa menjadi beberapa host lain dan / admin bisa menjadi database lain di mana otentikasi telah diterapkan
sumber
Periksa versi mongo klien dari tempat kami terhubung ke server mongo.
Kasus saya, server mongo adalah versi Mongo4.0.0 tetapi klien saya menggunakan versi 2.4.9. Perbarui versi mongo untuk memperbarui mongo cli.
sumber