mongo로 인증 할 수 없습니다. "인증 실패"
다음 지침을 사용하여 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 SECRETPASSWORD
오류를 제공합니다.
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
.
내가 무엇을 놓치고 있습니까?
인증은 데이터베이스 수준에서 관리됩니다. 데이터베이스를 사용하여 시스템에 연결하려고 할 때 mongo는 실제로 컬렉션에서 제공 한 자격 증명을 확인합니다 <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 SECRETPASSWORD --authenticationDatabase admin
2017 년 11 월 18 일 업데이트 :
mongo admin -u admin -p
더 나은 솔루션입니다. Mongo는 암호를 묻는 메시지를 표시합니다. 이렇게하면 끔찍한 보안 관행 인 쉘 기록에 일반 텍스트 암호를 넣지 않습니다.
mongo 셸을 업그레이드해야 할 수도 있습니다. 로컬에서 mongo 쉘 버전 2.4.9를 사용했는데 mongo 3 데이터베이스에 연결하려고하면이 오류가 발생했습니다. 셸 버전을 3으로 업그레이드하면 문제가 해결되었습니다.
나는 이것이 분명해 보일 수 있지만 작동하기 전에 u / n 및 p / w 주위에 작은 따옴표를 사용해야했습니다.
mongo admin -u 'user'-p 'password'
MongoDB 3.0에서는 이제 여러 인증 메커니즘을 지원합니다.
- MongoDB Challenge 및 Response (SCRAM-SHA-1)-3.0의 기본값
- MongoDB Challenge 및 Response (MONGODB-CR)-이전 기본값 (<3.0)
새 사용자가 생성 된 새 3.0 데이터베이스로 시작했다면 SCRAM-SHA-1을 사용하여 생성되었을 것입니다.
따라서 해당 인증이 가능한 드라이버가 필요합니다.
http://docs.mongodb.org/manual/release-notes/3.0-scram/#considerations-scram-sha-1-drivers
기존 사용자 데이터를 사용하여 2.x에서 업그레이드 한 데이터베이스가있는 경우 여전히 MONGODB-CR을 사용하고 사용자 인증 데이터베이스를 업그레이드해야합니다.
http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram
이제 SCRAM-SHA-1로 생성 된 사용자로 MongoDB 3.0에 연결하여 인증 데이터베이스를 지정하고 (명령 줄 mongo 클라이언트를 통해) 드라이버를 사용하는 경우 다른 메커니즘을 사용해야합니다.
$> mongo -u USER -p PASSWORD --authenticationDatabase admin
이 경우 기본값이기도 한 "admin"데이터베이스가 인증에 사용됩니다.
이 표시 문제가 몽고의 문서에 기술 된 방법을 통해 생성 된 사용자가 해당 사용자가 "userAdminAnyDatabase"와 "dbAdminAnyDatabase"역할로 생성 된 경우에도 기본 데이터베이스 (테스트)에 연결할 수있는 권한이 없다는 것입니다.
이것은 내 문제를 해결했습니다.
터미널 셸로 이동하여 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);
});
이것은 일종의 특정한 경우이지만 누군가 내 문제로 여기에 올 경우 :
MongoHQ에서는 "password"라는 필드가 표시되지만 실제로는 암호의 해시 일뿐입니다. 새 사용자를 추가하고 비밀번호를 다른 곳에 저장해야합니다 (MongoHQ가이를 표시하지 않기 때문).
The proper way to login into mongo shell is
mongo localhost:27017 -u 'uuuuu' -p '>xxxxxx' --authenticationDatabase dbname
Another possibility: When you created the user, you may have accidentally been use
ing a database other than admin
, or other than the one you wanted. You need to set --authenticationDatabase
to the database that the user was actually created under.
mongodb
seems to put you in the test
database by default when you open the shell, so you'd need to write --authenticationDatabase test
rather than --authenticationDatabase admin
if you accidentally were use
ing test
when you ran db.createUser(...)
.
Assuming you have access to the machine that's running the mongodb instance, y could disable authorization in /etc/mongod.conf
(comment out authorization
which is nested under security), and then restart your server, and then run:
mongo
show users
And you might get something like this:
{
"_id" : "test.myusername",
"user" : "myusername",
"db" : "test",
"roles" : [
{
"role" : "dbOwner",
"db" : "mydatabasename"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
Notice that the db
value equals test
. That's because when I created the user, I didn't first run use admin
or use desiredDatabaseName
. So you can delete the user with db.dropUser("myusername")
and then create another user under your desired database like so:
use desiredDatabaseName
db.createUser(...)
Hopefully that helps someone who was in my position as a noob with this stuff.
You can also try this :-
mongo localhost:27017/admin -u admin -p SECRETPASSWORD
Found it in this post
Here obviously the localhost can be some other host and the /admin can be some other database on which authentication has been applied
Check for the mongo version of the client from where we are connecting to mongo server.
My case, mongo server was of version Mongo4.0.0 but my client was of version 2.4.9. Update the mongo version to update mongo cli.
참고URL : https://stackoverflow.com/questions/18216712/cannot-authenticate-into-mongo-auth-fails
'Program Tip' 카테고리의 다른 글
Android의 EditText에서 URL / 웹 사이트 이름을 확인하는 방법은 무엇입니까? (0) | 2020.10.08 |
---|---|
Highcharts 차트 옵션 backgroundColor : 'transparent'IE 8에서 검은 색 표시 (0) | 2020.10.08 |
Navbar의 부트 스트랩 3.0 버튼 (0) | 2020.10.08 |
Android 발리를 Android Studio로 가져 오기 (0) | 2020.10.08 |
UIButton의 imageView를 어떻게 확장합니까? (0) | 2020.10.08 |