mongo에 인증할 수 없습니다. "auth failures"
다음 명령을 사용하여 mongo 관리 사용자를 만들었습니다.
http://docs.mongodb.org/manual/tutorial/add-user-administrator/
mongo 클라이언트에서 인증할 수 있을 것 같습니다.
> use admin
switched to db admin
> db.auth('admin','SECRETPASSWORD');
1
>
하지만 다른 방법은 연결할 수 없습니다.예를 들어 다음과 같습니다.
mongo - u admin -p SECRET PASSWORD
에러가 표시됩니다.
JavaScript execution failed: Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:L228
있다auth = true
etc/mongod.conf
.
제가 무엇을 빠뜨리고 있나요?
인증은 데이터베이스 수준에서 관리됩니다.합니다.<database>.system.users
으로 " "test"에서 test.system.users
는 에러에 ).admin.system.users
). 쓸 수 직접 수 것은 모든 DB에서 읽고 쓸 수 있는 권한이 있다고 해서 직접 연결할 수 있는 것은 아닙니다.
먼저 자격 증명을 보유한 데이터베이스에 연결해야 합니다.시험:
mongo admin -u admin -p SECRETPASSWORD
상세한 것에 대하여는, http://docs.mongodb.org/manual/reference/privilege-documents/ 를 참조해 주세요.
또, 다음의 에러가 발생했습니다.필요한 것은, 사용자 인증 데이터가 격납되어 있는 데이터베이스를 지정하는 것이었습니다.
mongo - u admin -p SECRET PASSWORD --authenticationDatabase admin
2017년 11월 18일 갱신:
mongo admin -u admin -p
더 나은 해결책입니다.Mongo가 비밀번호를 입력하도록 지시할 것입니다.이렇게 하면 클리어 텍스트 비밀번호를 셸 이력에 입력하지 않게 됩니다.이것은 끔찍한 보안 관행일 뿐입니다.
mongo 쉘을 업그레이드해야 할 수 있습니다.버전 2.4.9의 mongo 셸을 로컬로 사용하고 있었는데 mongo 3 데이터베이스에 접속하려고 하면 오류가 발생하였습니다.셸 버전을 3으로 업그레이드하면 문제가 해결되었습니다.
당연한 것처럼 보일 수도 있지만, 작동하기 전에 u/n과 p/w 주위에 하나의 인용문을 사용해야만 했습니다.
mongo admin - u 'user' -p 'password'
MongoDB 3.0에서는 여러 인증 메커니즘을 지원합니다.
- MongoDB Challenge and Response(SCRAM-SHA-1) - 3.0 디폴트
- MongoDB Challenge and Response (MONGODB-CR) - 이전 기본값(< 3.0)
신규 사용자가 생성된 새로운 3.0 데이터베이스로 시작할 경우 SCRAM-SHA-1을 사용하여 작성됩니다.
이 때문에, 그 인증을 실시할 수 있는 드라이버가 필요합니다.
http://docs.mongodb.org/manual/release-notes/3.0-scram/ #completions-sha-1-completions
기존 사용자 데이터를 사용하여 2.x에서 데이터베이스를 업그레이드한 경우에도 MONGODB-CR은 계속 사용되므로 사용자 인증 데이터베이스를 업그레이드해야 합니다.
http://docs.mongodb.org/manual/release-notes/3.0-scram/ #upgrade-mongodb-cr-to-mongodb
SCRAM-SHA-1로 작성된 사용자와 MongoDB 3.0에 접속하여 인증 데이터베이스를 지정(커맨드라인 mongo 클라이언트 경유)하고 드라이버를 사용하는 경우 다른 메커니즘을 사용해야 합니다.
$> mongo - u USER - p PASSWORD -- authentication Database admin
이 경우 "admin" 데이터베이스가 인증에 사용됩니다.이 데이터베이스도 기본값입니다.
이것으로 문제가 해결되었습니다.
터미널 쉘로 이동하여 입력mongo
.
그런 다음 입력합니다.use db_name
.
그런 다음 다음과 같이 입력합니다.
db.createUser(
{
user: "mongodb",
pwd: "dogmeatsubparflavour1337",
roles: [ { role: "dbOwner", db: "db_name" } ]
}
)
또, 다음의 조작도 시험해 주세요.db.getUsers()
퀵 샘플:
const MongoClient = require('mongodb').MongoClient;
// MongoDB Connection Info
const url = 'mongodb://mongodb:dogmeatsubparflavour1337@stackoverflow.com: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);
});
문제는 mongo documents에서 설명한 방법으로 작성된 사용자에게 기본 데이터베이스(테스트)에 접속할 권한이 없다는 것입니다.이 사용자는 "userAdminAnyDatabase" 및 "dbAdminAnyDatabase" 역할로 작성되어 있어도 마찬가지입니다.
또 다른 가능성:사용자를 생성했을 때 실수로 인해use
다른 데이터베이스 입력admin
아니면 당신이 원하는 것 말고도.설정해야 합니다.--authenticationDatabase
사용자가 실제로 생성된 데이터베이스로 이동합니다.
mongodb
당신을 곤경에 빠뜨린 것 같다test
셸을 열 때 기본적으로 데이터베이스를 사용하기 때문에--authenticationDatabase test
보다는--authenticationDatabase admin
만약 당신이 우연히use
입력test
네가 뛰었을 때db.createUser(...)
.
mongodb 인스턴스를 실행하고 있는 머신에 액세스 할 수 있다고 가정하면, y는 에서 인가를 무효로 할 수 있습니다./etc/mongod.conf
(삭제하다authorization
보안에 의해 중첩됩니다).그리고 서버를 재시작한 후 다음 작업을 수행합니다.
mongo
show users
다음과 같은 결과를 얻을 수 있습니다.
{
"_id" : "test.myusername",
"user" : "myusername",
"db" : "test",
"roles" : [
{
"role" : "dbOwner",
"db" : "mydatabasename"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
주의:db
값이 같다test
그 이유는 사용자를 만들 때 처음 실행하지 않았기 때문입니다.use admin
또는use desiredDatabaseName
.이렇게 하면사용자를삭제할수있습니다.db.dropUser("myusername")
원하는 데이터베이스 아래에 다음과 같이 다른 사용자를 작성합니다.
use desiredDatabaseName
db.createUser(...)
내 입장이었던 누군가가 도움이 됐으면 좋겠다.
이것도 시도해 보세요:-
mongo localhost:27017/admin -u admin -p SECRETPASSWORD
여기서 localhost는 다른 호스트일 수도 있고 /admin은 인증이 적용된 다른 데이터베이스일 수도 있습니다.
이건 특정 케이스지만 누군가 내 문제를 가지고 올 경우를 대비해서:
MongoHQ에서는 "password"라는 필드가 표시되지만 실제로는 비밀번호 해시일 뿐입니다.새 사용자를 추가하고 암호를 다른 곳에 저장해야 합니다(Mongo가본사에서 보여주지 않습니다.)
mongo 쉘에 로그인하는 적절한 방법은
mongo localhost: 27017 - u 'uuuuu' - p '> xxxxx' -- authentication Database dbname
mongo admin -u root -p root
mongorestore -u root --authenticationDatabase admin --db rtp_new mongo
mongo 서버에 접속하고 있는 클라이언트의 mongo 버전을 확인합니다.
제 경우 mongo 서버는 Mongo 4.0.0 버전인데 제 클라이언트는 2.4.9 버전입니다.mongo 버전을 업데이트하여 mongo CLI를 업데이트합니다.
는, 이 에러에 각를 떼어내는 에 발생하고 .<password>
mongoURI가 있습니다.그것들을 제거하는 것은 마법처럼 효과가 있었다.
언급URL : https://stackoverflow.com/questions/18216712/cannot-authenticate-into-mongo-auth-fails
'programing' 카테고리의 다른 글
react - typescript를 사용하여 컨텍스트를 만들 때 네임스페이스 'ctx'를 찾을 수 없습니다. (0) | 2023.04.03 |
---|---|
고객 일치 배송 구역 삭제..". woocommerce 카트에 있는 메시지 (0) | 2023.04.03 |
워드프레스가 내 URL 끝에 %E2%80%8E을(를) 넣는데, 어떻게 된 거죠? (0) | 2023.03.05 |
3레벨의 MongoDB 중첩 조회 (0) | 2023.03.05 |
Oracle 데이터베이스에 존재하는 모든 역할을 나열하는 방법은 무엇입니까? (0) | 2023.03.05 |