몽고 데이터베이스에 대한 관리자로 사용자를 생성 오류가 발생


17

모든 데이터베이스에 액세스 할 수있는 권한이있는 간단한 사용자를 만들려고하고 어떤 작업도 수행 할 수 있습니다. createUser명령 을 실행하려고 할 때 다음 오류가 발생했습니다.

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

위의 문제는 인증 구성을 활성화하고 필요한 경우에만 발생합니다.

따라서 모든 데이터베이스에 대한 관리자 권한을 가진 사용자를 어떻게 만듭니 까? 인증 연결을 사용하도록 내 몽고 서비스를 구성했기 때문에 원합니다. 내 데이터 덤프를 실행하려면이 인증 매개 변수를 사용해야합니다.

도와주세요?

사용 몽고 버전 3.0.5을 .

서비스는 Amazon Linux AMI 2015.03 (HVM), SSD 볼륨 유형에 있습니다-ami-1ecae776

답변:


22

'... AnyDatabase'역할은 사용자의 관리 데이터베이스에 추가해야합니다.

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

모든 데이터베이스 :

  • 데이터베이스 사용자 역할
  • 데이터베이스 관리 역할

관리 데이터베이스 :

  • 클러스터 관리 역할
  • 백업 및 복원 역할
  • 모든 데이터베이스 역할

추가 : 데이터베이스 및 관리자마다 다른 역할을 부여하려면 다음을 수행하십시오.

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 사용자를 작성하지만 다른 데이터베이스에서 조치를 수행하려고 할 때 권한 부여 오류가 발생합니다.
Robert

어떤 행동을 시도 했습니까? 살펴보기 : docs.mongodb.org/manual/reference/built-in-roles
aldwinaldwin

0

당은 MongoDB BOL 인증을 활성화 액세스 제어 활성화하면이있는 사용자가 확인 userAdmin 또는 userAdminAnyDatabase 관리자 데이터베이스의 역할을. 이 사용자는 다음과 같은 사용자 및 역할을 관리 할 수 ​​있습니다. 사용자 작성, 사용자의 역할 부여 또는 취소, 사용자 정의 역할 작성 또는 수정

액세스 제어를 활성화하기 전이나 후에 사용자를 만들 수 있습니다. 사용자를 만들기 전에 액세스 제어를 활성화하면 MongoDB는 로컬 데이터베이스 예외 를 제공 하여 관리자 데이터베이스에서 사용자 관리자를 만들 수 있습니다. 작성된 후에는 필요에 따라 추가 사용자를 작성하려면 사용자 관리자로 인증해야합니다.

순서

다음 절차를 수행하면 Enable Auth됩니다. 먼저 액세스 제어없이 실행중인 MongoDB 인스턴스에 사용자 관리자를 추가 한 다음 액세스 제어를 활성화합니다.

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)

인스턴스에 연결

예를 들어, mongo쉘을 인스턴스에 연결하십시오 .

mongo --port 27017

mongo셸을 배포 에 연결하는 데 적절한 추가 명령 줄 옵션을 지정 하십시오 (예 :) --host.

사용자 관리자 만들기

예를 들어 여기 관리 데이터베이스에서 userAdminAnyDatabase역할이 있는 사용자를 추가하십시오 . 예를 들어, 다음은 admin 데이터베이스myUserAdmin 에서 사용자 를 작성 합니다 .

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

참고 : 사용자를 생성 한 데이터베이스 (이 예에서는 admin)는 사용자의 인증 데이터베이스입니다. 사용자는이 데이터베이스를 인증하지만 다른 데이터베이스에서 역할을 가질 수 있습니다. 즉, 사용자의 인증 데이터베이스는 사용자의 권한을 제한하지 않습니다.

mongo쉘을 분리하십시오 .

액세스 제어로 MongoDB 인스턴스를 다시 시작하십시오.

mongod--auth 명령 행 옵션 또는 구성 파일을 사용하는 경우 security.authorization 설정으로 인스턴스를 다시 시작하십시오 .

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

이 인스턴스에 연결하는 클라이언트는 이제 자신을 MongoDB사용자 로 인증해야합니다 . 클라이언트는 할당 된 역할에 따라 결정된 작업 만 수행 할 수 있습니다.

사용자 관리자로 연결 및 인증

mongo쉘을 사용하여 다음을 수행 할 수 있습니다.

  • 사용자 자격 증명을 전달하여 인증으로 연결하거나

  • 인증없이 먼저 연결 한 다음 db.auth () 메소드를 실행하여 인증하십시오.

연결하는 동안 인증하려면 명령 행 옵션을 mongo사용하여 쉘을 시작하십시오 -u <username>, -p <password>, and the --authenticationDatabase <database>.

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.

연결 후 인증하려면

mongo쉘을 다음에 연결하십시오 mongod.

mongo --port 27017

인증 데이터베이스 (이 경우 admin)로 전환하고 db.auth (,) 메소드를 사용하여 인증하십시오.

> use admin
switched to db admin
> db.auth("mongoadmin","mongoadmin")
1
>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.