Mongo Herhangi bir veritabanı için yönetici olarak bir kullanıcı oluşturun


17

Herhangi bir veritabanına erişim hakları izni ile basit bir kullanıcı oluşturmaya çalışıyorum ve herhangi bir eylem yapabilirsiniz. createUserKomutu çalıştırmaya çalışırken bu hatayı aldım:

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

Yukarıdaki sorun yalnızca kimlik doğrulama yapılandırmasını etkinleştirdiğimde ve buna ihtiyacım olduğunda ortaya çıkar.

Peki, herhangi bir veritabanı için yönetici iznine sahip bir kullanıcı nasıl oluştururum. Mongo hizmetlerimi kimlik doğrulama bağlantısı kullanacak şekilde yapılandırdığım için istiyorum. Verilerimin bir dökümünü yürütmek istiyorsam, bu kimlik doğrulama parametrelerini kullanmam gerekiyor.

Lütfen herhangi bir yardım?

Mongo sürüm 3.0.5 kullanma .

hizmet Amazon Linux AMI 2015.03 (HVM), SSD Birim Türü'nde - ami-1ecae776

Yanıtlar:


22

'... AnyDatabase' rolleri kullanıcı için yönetici veritabanına eklenmelidir:

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

Herhangi bir veritabanı:

  • Veritabanı Kullanıcı Rolleri
  • Veritabanı Yönetim Rolleri

Yönetici veritabanı:

  • Küme Yönetim Rolleri
  • Yedekleme ve Geri Yükleme Rolleri
  • Tüm Veritabanı Rolleri

Ekstra: Farklı veritabanı ve yönetici üzerinde farklı roller vermek için:

db.createUser({user:"replSetManager",pwd:"password",roles:[{role:"clusterManager",db:"admin"},{role:"dbOwner", db:"adminsblog"},{role:"readWrite", db:"departmentblog"},{role:"read", db:"otherblog"}]})

1
Mongoadmin kullanıcısını yönetici veritabanında oluşturuyorum, ancak diğer veritabanında herhangi bir işlem yapmaya çalıştığımda yetkilendirme hatası alıyorum.
Robert

Hangi eylemleri denediniz? Şuna bir göz atın: docs.mongodb.org/manual/reference/built-in-roles
aldwinaldwin

0

Gereğince MongoDB BOL Auth etkinleştirme erişim denetimi etkinleştirildiğinde ne zaman bir kullanıcı var sağlamak, userAdmin veya userAdminAnyDatabase yönetici veritabanında rolü. Bu kullanıcı, kullanıcı ve rolleri yönetebilir: kullanıcı oluşturma, kullanıcılardan rol verme veya iptal etme ve gümrük rolleri oluşturma veya değiştirme.

Erişim kontrolünü etkinleştirmeden önce veya sonra kullanıcılar oluşturabilirsiniz. Herhangi bir kullanıcı oluşturmadan önce erişim kontrolünü etkinleştirirseniz, MongoDB bir localhost istisnası sağlar , yönetici veritabanında bir kullanıcı yöneticisi oluşturmanıza izin veren sağlar. Oluşturulduktan sonra, gerektiğinde ek kullanıcılar oluşturmak için kullanıcı yöneticisi olarak kimlik doğrulaması yapmanız gerekir.

prosedür

İşte yapabileceğiniz aşağıdaki prosedür Enable Auth. İlk olarak erişim kontrolü olmadan çalışan bir MongoDB örneğine bir kullanıcı yöneticisi ekler ve sonra erişim kontrolünü etkinleştirir.

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)

Örneğe bağlanın

Örneğin, örneğe bir mongokabuk bağlayın .

mongo --port 27017

mongoKabuğu dağıtımınıza bağlamak için uygun olan ek komut satırı seçeneklerini belirtin --host.

Kullanıcı yöneticisi oluşturma

Örneğin burada yönetici veritabanında, userAdminAnyDatabaserole sahip bir kullanıcı ekleyin . Örneğin, aşağıdaki kullanıcı oluşturur myUserAdminiçinde yönetici veritabanı :

> 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"
                }
        ]
}

NOT: Kullanıcıyı oluşturduğunuz veritabanı (bu örnekte admin) kullanıcının kimlik doğrulama veritabanıdır. Kullanıcı bu veritabanının kimliğini doğrulasa da, kullanıcının diğer veritabanlarında rolleri olabilir; yani kullanıcının kimlik doğrulama veritabanı kullanıcının ayrıcalıklarını sınırlamaz.

mongoKabuğu ayırın .

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

mongodÖrneği --auth komut satırı seçeneğiyle veya bir yapılandırma dosyası kullanıyorsanız security.authorization ayarıyla yeniden başlatın .

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

Bu örneğe bağlanan istemciler artık kendilerini MongoDB kullanıcı . İstemciler yalnızca atanan rolleri tarafından belirlenen eylemleri gerçekleştirebilir.

Kullanıcı yöneticisi olarak bağlanın ve kimlik doğrulaması yapın

mongoKabuğu kullanarak şunları yapabilirsiniz:

  • Kullanıcı kimlik bilgilerini ileterek kimlik doğrulamasıyla bağlantı kurun veya

  • Önce kimlik doğrulaması ile bağlanın ve sonra kimlik doğrulaması yapmak için db.auth () yöntemini verin.

Bağlantı sırasında kimlik doğrulaması mongoyapmak için -u <username>, -p <password>, and the --authenticationDatabase <database>Komut satırı seçenekleriyle bir kabuk başlatın:

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.

Bağlandıktan sonra kimlik doğrulaması yapmak için

mongoKabuğu şuraya bağlayın mongod:

mongo --port 27017

Kimlik doğrulama veritabanına (bu durumda admin) geçin ve kimlik doğrulaması için db.auth (,) yöntemini kullanın:

> use admin
switched to db admin
> db.auth("mongoadmin","mongoadmin")
1
>
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.