programing

MongoDB 3.2 인증 실패

starjava 2023. 5. 27. 09:16
반응형

MongoDB 3.2 인증 실패

다음 명령 집합을 사용하여 사용자를 만듭니다.이렇게 하면 두 가지 모두에서 사용자가 생성됩니다.admindb 및 내 목표 db(c2d):

# mongo 127.0.0.1:27017
MongoDB shell version: 3.2.6-29-g5c19788
connecting to: 127.0.0.1:27017/test
> use admin
switched to db admin
> show collections
system.users
system.version
> db.system.users.find()
> db.createUser({user:"cd2", pwd:"cd2", roles:[{role:"dbOwner", db: "c2d"}]})
Successfully added user: {
    "user" : "cd2",
    "roles" : [
        {
            "role" : "dbOwner",
            "db" : "c2d"
        }
    ]
}
> db.system.users.find()
{ "_id" : "admin.cd2", "user" : "cd2", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "4g6t9kC+godz7k6QQOfD+A==", "storedKey" : "m3tDZBQDU2Tlb1lIjLGyTHmr2QQ=", "serverKey" : "GSA4OXSod1s8mBuZBtfmXq2tlTo=" } }, "roles" : [ { "role" : "dbOwner", "db" : "c2d" } ] }
> use c2d
switched to db c2d
> db.createUser({user:"cd2", pwd:"cd2", roles:[{role:"dbOwner", db: "c2d"}]})
Successfully added user: {
    "user" : "cd2",
    "roles" : [
        {
            "role" : "dbOwner",
            "db" : "c2d"
        }
    ]
}
> use admin
switched to db admin
> db.system.users.find()
{ "_id" : "admin.cd2", "user" : "cd2", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "4g6t9kC+godz7k6QQOfD+A==", "storedKey" : "m3tDZBQDU2Tlb1lIjLGyTHmr2QQ=", "serverKey" : "GSA4OXSod1s8mBuZBtfmXq2tlTo=" } }, "roles" : [ { "role" : "dbOwner", "db" : "c2d" } ] }
{ "_id" : "c2d.cd2", "user" : "cd2", "db" : "c2d", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "vnMjnjfykVQS8ujQXeWaYw==", "storedKey" : "OYXivkmIwuTavlwTGfjrspT6j2E=", "serverKey" : "lw8xqzAaW8V4IQ9wOmQrG2VSp88=" } }, "roles" : [ { "role" : "dbOwner", "db" : "c2d" } ] }

로그인하려고 하면 다음과 같은 오류 메시지가 표시됩니다.

# mongo 127.0.0.1:27017/c2d -u c2d -p c2d
MongoDB shell version: 3.2.6-29-g5c19788
connecting to: 127.0.0.1:27017/c2d
2016-05-22T10:35:41.862+0100 E QUERY    [thread1] Error: Authentication failed. :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1441:20
@(auth):6:1
@(auth):1:2

exception: login failed

그런 다음 conf 파일에서 보안 기능을 활성화하고 서버를 재시작합니다.

security:
  authorization: enabled

오류는 여전히 동일합니다.

# mongo 127.0.0.1:27017/c2d -u c2d -p c2d
MongoDB shell version: 3.2.6-29-g5c19788
connecting to: 127.0.0.1:27017/c2d
2016-05-22T10:37:43.713+0100 E QUERY    [thread1] Error: Authentication failed. :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1441:20
@(auth):6:1
@(auth):1:2

exception: login failed

사용자를 성공적으로 만들려면 몇 가지 단계를 순차적으로 수행해야 합니다.

먼저 관리자 사용자를 생성해야 합니다.저는 슈퍼 유저를 만드는 것을 선호합니다.

> use admin
> db.createUser({user: "root", pwd: "123456", roles:["root"]})

MongoDB 서버를 다시 시작하고 인증을 사용하도록 설정합니다.--auth깃발

> mongod --auth --port 27017 --dbpath /var/lib/mongodb

서버가 가동되면 관리자로 서버에 연결합니다.

> mongo <host:port> -u "root" -p "123456" --authenticationDatabase "admin"

연결되면 일반 사용자를 만듭니다.사용자 데이터베이스 이름을 다음과 같이 가정합니다.cd2.

> use cd2
> db.createUser({user: "cd2", pwd: "cd2", roles:["dbOwner"]})

성공 메시지가 표시되면 mongo 셸에서 연결을 끊고 새 사용자 자격 증명에 다시 연결합니다.

> mongo <host:port>/cd2 -u "cd2" -p "cd2"

셸을 통해 로그인하는 경우 사용자 정의된 db가 아닌 db "admin" 아래에 사용자를 만드십시오.당신의 경우 "c2d"로 전환했습니다.

다음은 제가 시도한 내용입니다("admin"으로 로그인).

이것은 작동할 것입니다.

$ mongo -u admin -p --authenticationDatabase "admin"
> use admin
> db.createUser(
  {
    user: "user007",
    pwd: "YourP@ssw0rd",
    roles: [
       { role: "readWrite", db: "yourdb" },
    ]
  }
)

출력 1:

root@mongo-server:/# mongo -u admin -p --authenticationDatabase "admin"
MongoDB shell version v4.0.6
Enter password:
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&gssapiServiceName=mongodb
MongoDB server version: 4.0.6
----
> use admin
switched to db admin
> db.createUser(
...   {
...     user: "user007",
...     pwd: "YourP@ssw0rd",
...     roles: [
...        { role: "readWrite", db: "yourdb" },
...     ]
...   }
... )
Successfully added user: {
        "user" : "user007",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "yourdb"
                }
        ]
}
root@mongo-server:/# mongo -u user007 -p YourP@ssw0rd

connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ceabf440-c584-4518-90f5-cc845eaec3b3") }
MongoDB server version: 4.0.6
---
>

이 작업은 실패합니다.

$ mongo -u admin -p --authenticationDatabase "admin"
> use yourdb
> db.createUser(
  {
    user: "user007",
    pwd: "YourP@ssw0rd",
    roles: [
       { role: "readWrite", db: "yourdb" },
    ]
  }
)

출력 2:

root@mongo-server:/# mongo -u admin -p --authenticationDatabase "admin"
MongoDB shell version v4.0.6
Enter password:
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&gssapiServiceName=mongodb
MongoDB server version: 4.0.6
----
> use yourdb
switched to db yourdb
> db.createUser(
...   {
...     user: "user007",
...     pwd: "YourP@ssw0rd",
...     roles: [
...        { role: "readWrite", db: "yourdb" },
...     ]
...   }
... )
Successfully added user: {
        "user" : "user007",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "yourdb"
                }
        ]
}
>
root@mongo-server:/# mongo -u user007 -p YourP@ssw0rd
MongoDB shell version v4.0.6
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
2019-12-06T04:28:34.630+0800 E QUERY    [js] Error: Authentication failed. :
connect@src/mongo/shell/mongo.js:343:13
@(connect):1:6
exception: connect failed

MongoDB(3.2.4)에서 이 문제에 대한 우리의 경험은 버그나 문서화되지 않은 기능처럼 보인다는 것입니다.로컬 호스트가 아닌 원격 셸에서 사용자와 역할을 생성하려고 하면 사용자가 생성되지만 셸을 떠나자마자 해당 사용자는 사라지며(그 사용자는 해당 세션으로 일시적으로 전환됨) 실제로 지속되지는 않습니다.

솔루션:MongoDB에서 초기에 활성화된 인증 없이 사용자를 만들고 DB 서버(로컬 호스트)의 콘솔에서 직접 인증을 수행합니다.

해라--authenticationDatabase=adminadmin이 인증 데이터베이스인 경우 터미널 mongo 명령의 옵션입니다.

예:

다음 대신:mongo 127.0.0.1:27017/c2d -u c2d -p c2d

사용:mongo 127.0.0.1:27017/c2d -u c2d -p c2d --authenticationDatabase=admin

언급URL : https://stackoverflow.com/questions/37372684/mongodb-3-2-authentication-failed

반응형