Mongo Buat pengguna sebagai admin untuk setiap basis data menimbulkan kesalahan

17

Saya mencoba membuat pengguna sederhana dengan izin hak untuk mengakses ke basis data apa pun dan dapat melakukan tindakan apa pun. Ketika saya mencoba menjalankan createUserperintah, saya mendapatkan kesalahan ini:

db.createUser({ user: "mongoadmin" , pwd: "mongoadmin", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]})
2015-08-20T17:09:42.300+0000 E QUERY    Error: couldn't add user: No role named userAdminAnyDatabase@new_vehicles_catalog

Masalah di atas hanya terjadi ketika saya mengaktifkan konfigurasi auth dan saya membutuhkannya.

Jadi, Bagaimana cara membuat pengguna dengan izin admin untuk basis data apa pun. Saya menginginkannya karena saya mengkonfigurasi layanan mongo saya untuk menggunakan koneksi otentikasi. Jika saya ingin menjalankan dump data saya, saya harus menggunakan parameter otentikasi ini.

Tolong ada bantuan?

Menggunakan mongo versi 3.0.5 .

layanan ini di Amazon Linux AMI 2015.03 (HVM), Tipe Volume SSD - ami-1ecae776

Robert
sumber

Jawaban:

22

Peran '... AnyDatabase' harus ditambahkan ke database admin untuk pengguna:

use admin
db.createUser({ user: "mongoadmin" , pwd: "mongoadmin", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]})

Basis data apa saja:

  • Peran Pengguna Basis Data
  • Peran Administrasi Basis Data

Database admin:

  • Peran Administrasi Cluster
  • Peran Cadangan dan Pemulihan
  • Peran Semua-Database

Ekstra: Untuk memberikan peran berbeda pada database dan admin berbeda:

db.createUser({user:"replSetManager",pwd:"password",roles:[{role:"clusterManager",db:"admin"},{role:"dbOwner", db:"adminsblog"},{role:"readWrite", db:"departmentblog"},{role:"read", db:"otherblog"}]})
aldwinaldwin
sumber
1
Saya membuat pengguna mongoadmin pada database admin, tetapi ketika saya mencoba melakukan tindakan apa pun di database lain saya mendapatkan kesalahan otorisasi.
Robert
Tindakan apa yang Anda coba? Lihatlah: docs.mongodb.org/manual/reference/built-in-roles
aldwinaldwin
0

Sesuai MongoDB BOL Aktifkan Auth Dengan kontrol akses diaktifkan, pastikan Anda memiliki pengguna dengan userAdmin atau userAdminAnyDatabase peran dalam database admin. Pengguna ini dapat mengatur pengguna dan peran seperti: membuat pengguna, memberikan atau mencabut peran dari pengguna, dan membuat atau memodifikasi peran pabean.

Anda dapat membuat pengguna baik sebelum atau setelah mengaktifkan kontrol akses. Jika Anda mengaktifkan kontrol akses sebelum membuat pengguna apa pun, MongoDB menyediakan pengecualian hosting lokal yang memungkinkan Anda membuat administrator pengguna di basis data admin. Setelah dibuat, Anda harus mengotentikasi sebagai administrator pengguna untuk membuat pengguna tambahan sesuai kebutuhan.

Prosedur

Berikut adalah prosedur berikut yang dapat Anda gunakan Enable Auth. Pertama menambahkan administrator pengguna ke instance MongoDB yang berjalan tanpa kontrol akses dan kemudian mengaktifkan kontrol akses.

mongod --port 27017 --dbpath /data/db1

C:\Program Files\MongoDB\Server\3.6\bin>mongod --auth --port 27017 --dbpath /data/db1
2018-01-02T00:04:21.038-0700 I CONTROL  [initandlisten] MongoDB starting : pid=8048 port=27017 dbpath=/data/db1 64-bit host=ACSD140013
2018-01-02T00:04:21.038-0700 I CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] db version v3.6.0
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] git version: a57d8e71e6998a2d0afde7edc11bd23e5661c915
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1u-fips  22 Sep 2016
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] allocator: tcmalloc
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] modules: none
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] build environment:
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten]     distmod: 2008plus-ssl
2018-01-02T00:04:21.040-0700 I CONTROL  [initandlisten]     distarch: x86_64
2018-01-02T00:04:21.040-0700 I CONTROL  [initandlisten]     target_arch: x86_64
2018-01-02T00:04:21.040-0700 I CONTROL  [initandlisten] options: { net: { port: 27017 }, security: { authorization: "enabled" }, storage: { dbPath: "/data/db1" } }
2018-01-02T00:04:21.044-0700 I -        [initandlisten] Detected data files in /data/db1 created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2018-01-02T00:04:21.044-0700 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1508M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2018-01-02T00:04:21.557-0700 I STORAGE  [initandlisten] WiredTiger message [1514876661:556397][8048:140720576475904], txn-recover: Main recovery loop: starting at 1/35584
2018-01-02T00:04:21.677-0700 I STORAGE  [initandlisten] WiredTiger message [1514876661:676479][8048:140720576475904], txn-recover: Recovering log 1 through 2
2018-01-02T00:04:21.792-0700 I STORAGE  [initandlisten] WiredTiger message [1514876661:792524][8048:140720576475904], txn-recover: Recovering log 2 through 2
2018-01-02T00:04:23.008-0700 I CONTROL  [initandlisten]
2018-01-02T00:04:23.008-0700 I CONTROL  [initandlisten] ** WARNING: This server is bound to localhost.
2018-01-02T00:04:23.009-0700 I CONTROL  [initandlisten] **          Remote systems will be unable to connect to this server.
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten]
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten]
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten] ** WARNING: The file system cache of this machine is configured to be greater than 40% of the total memory. This can lead to increased memory pressure and poor performance.
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten] See http://dochub.mongodb.org/core/wt-windows-system-file-cache
2018-01-02T00:04:23.012-0700 I CONTROL  [initandlisten]
2018-01-02T10:04:23.320+0300 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db1/diagnostic.data'
2018-01-02T10:04:23.322+0300 I NETWORK  [initandlisten] waiting for connections on port 27017
2018-01-02T10:05:09.214+0300 I NETWORK  [listener] connection accepted from 127.0.0.1:64482 #1 (1 connection now open)

Hubungkan ke instance

Misalnya, hubungkan mongoshell ke instance.

mongo --port 27017

Tentukan opsi baris perintah tambahan yang sesuai untuk menghubungkan mongoshell ke penyebaran Anda, seperti --host.

Buat administrator pengguna

Misalnya di sini di database admin, tambahkan pengguna dengan userAdminAnyDatabaseperan. Misalnya, berikut ini membuat pengguna myUserAdmindi database admin :

> use admin
switched to db admin
> use admin
switched to db admin
> db.createUser(
...   {
...     user: "mongoadmin",
...     pwd: "mongoadmin",
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
...   }
... )
Successfully added user: {
        "user" : "mongoadmin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}

CATATAN: Basis data tempat Anda membuat pengguna (dalam contoh ini, admin) adalah basis data otentikasi pengguna. Meskipun pengguna akan mengautentikasi ke database ini, pengguna dapat memiliki peran dalam database lain; yaitu database otentikasi pengguna tidak membatasi hak pengguna.

Putuskan sambungan mongoshell.

Mulai ulang instance MongoDB dengan kontrol akses

mongodMulai ulang instance dengan opsi baris perintah --auth atau, jika menggunakan file konfigurasi, pengaturan security.authorization .

mongod --auth --port 27017 --dbpath /data/db1

Klien yang terhubung ke instance ini sekarang harus mengautentikasi diri mereka sebagai MongoDBpengguna. Klien hanya dapat melakukan tindakan yang ditentukan oleh peran yang ditugaskan kepada mereka.

Sambungkan dan otentikasi sebagai administrator pengguna

Dengan menggunakan mongoshell, Anda dapat:

  • Terhubung dengan otentikasi dengan mengirimkan kredensial pengguna, atau

  • Hubungkan dulu otentikasi mulut , dan kemudian keluarkan metode db.auth () untuk mengotentikasi.

Untuk mengotentikasi selama koneksi Mulai mongoshell dengan -u <username>, -p <password>, and the --authenticationDatabase <database>opsi baris perintah:

C:\Program Files\MongoDB\Server\3.6\bin>mongo --port 27017 -u "mongoadmin" -p "mongoadmin" --authenticationDatabase "admin"
MongoDB shell version v3.6.0
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.6.0
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
2018-01-02T10:05:09.248+0300 I STORAGE  [main] In File::open(), CreateFileW for 'H:\\.mongorc.js' failed with Access is denied.

Untuk mengautentikasi setelah tersambung

Hubungkan mongoshell ke mongod:

mongo --port 27017

Beralih ke database otentikasi (dalam hal ini, admin), dan gunakan metode db.auth (,) untuk mengotentikasi:

> use admin
switched to db admin
> db.auth("mongoadmin","mongoadmin")
1
>
Md Haidar Ali Khan
sumber