MongoDB 연결 실패: MongoServerError: bad auth : authentication failed
누군가는 쉽게 찾았을 방법이지만 나한테는 필요한 시간이었던 것 같다.
이 에러를 풀면서 몽고디비가 어떤 계층을 가지고 작동하는지 어렴풋이나마 알게 됐다.
Sol 1. 버전을 다운그레이드
ref : .https://www.inflearn.com/questions/29959/%EC%B0%B8%EA%B3%A0-mongodb-%EC%A0%91%EC%86%8D-%EC%98%A4%EB%A5%98-querysrv-enodata
몽고디비 버전에 따라서 connection string 옵션이 달라지는데 현재 프로젝트 하다가 노트북이 사망하는 바람에
현재 모든 앱을 다시 설치한 상태. (엊그제 아틀라스도 다시 설치했다)
아마 재설치하면서 최신 버전으로 업데이트 되어서 에러가 생긴 것 같다고 생각했다.
=> x
Sol 2. ID와 PW 틀렸을 때 나오는 대표적인 에러
새로운 프로젝트를 생성해보았다 (: atlas 웹 cloud이용해 프로젝트 생성 , 그대로 따라가보면 : Users will be given the read and write to any database privilege by default. 라는 문구 확인할 수 있음 )
=> x
Sol 3. 접근 IP설정을 다시 해주었다
=> x
상황을 정리해보면
=> 뭔가 엄청나게 중요한 설정을 딱 하나 놓친 것 같다는 생각 (모든 권한이 다 막혀있다 )
- mongoDB 접속이 안되는 문제 발생 ( 로컬에서 발생 => db연결시 admin 계정이 아니어서 권한문제가 뜨나?)
- 그러면 admin계정에 생성해야겟다
- 그런데 이미 있는 계정에 admin권한(root) 을 주는 것도 안되고
- 생성하는 것도 안된다.
그래서 지금 root 권한을 줄 수 있는 다른 방법이 있지 않을까? 생각해서 방법을 찾아볼 건데 ,
몽고디비를 돌아가는 시스템을 정확히 몰라서 못 찾을수도 있다
최고관리자는 원래 반드시 하나가 있어야한다 (보통) / 그리고 그게 첫 생성시에 admin 역할을 할 계정을 생성하는 것
Sol 4. Studio 3T에 userManagement라는 설정이 있다고 해서 설치해보았다
admin 을 우클릭하면 manage Users 가 나와서 그걸로 최고관리자 계정을 주기로 했으나 실패
Sol 5. mongoShell을 이용 (명령어가 더 많은 정보)
그런데 나는 mac을 어제 사서 brew 라는 게 있는지도 몰랐다.
Brew 설치 (for install mongosh)
jeonghye@ijeonghyeui-MacBookPro ~ % brew install mongosh
zsh: command not found: brew
jeonghye@ijeonghyeui-MacBookPro ~ % brew --v
zsh: command not found: brew
jeonghye@ijeonghyeui-MacBookPro ~ % echo $0
-zsh
jeonghye@ijeonghyeui-MacBookPro ~ % vi ~/.zshrc
jeonghye@ijeonghyeui-MacBookPro ~ % cat .~/.zshrc
cat: .~/.zshrc: No such file or directory
jeonghye@ijeonghyeui-MacBookPro ~ % cat ~/.zshrc
export PATH=/opt/homebrew/bin:$PATH
환경변수 설정 : 기본 으로 설정되는 루트 말고 (설치된 경로와 실제 실행 명령 위치가 달라서 적용)
jeonghye@ijeonghyeui-MacBookPro ~ % source ~/.zshrc
중간에 mongosh 가 브라우저에서 다운받은 어플이라 안 된다는 경고도 나왔지만 그냥 설치했다 (맥이면 다 뜨는 것 같다 )
Db 개수가 많은데 그중에서 admin db를 사용하려고
(권한문제 : admin 권한이 필요한 역할들이 있는데 admin 계정이 아니라서 , admin 계정을 사용하면 해결할수도 있다 )
최고권한을 줘보자
Sol 6. db.createUser 명령어 이용
db.createUser({
user: "wjdwwidz"
pwd: "00000000"
roles: [ { role: 'root', db: 'admin' } ]
})
=> MongoServerError: (Unauthorized) not authorized on admin to execute command
Sol 7. 최고관리자생성(새 계정 )
db.createUser({ user: 'wjdwwidz', pwd: 'create1008', roles: [{ role: 'root', db: 'admin' }] });
보통 root계정으로 쓰는데..
Db.create명령이 안먹으니까 create 할 수 있는 권한을 주면 되나?
Sol 8. Db.create 를 create 할 수 있는 권한을 주어보자
mongosh "mongodb+srv://cluster0.uvblbtk.mongodb.net/" --apiVersion 1 --username wjdwwidz
User : wjdwwdiz
Pw : 0000000
[testDBd에서 생성이됨을 확인]
Sol 9. => 최고관리자계정 (이미 있는 계정에 최고관리자 권한)
db.grantRolesToUser('wjdwwidz', [{ role: 'root', db: 'test' }]) //
MongoServerError: CMD_NOT_ALLOWED: grantRolesToUser
Sol 10. wjdwwidz이 라는 이름이 있어서 안되는 것일 수 있으니 ... 이름 변경
db.createUser({ user: 'grantwjdwwidz', pwd: 'create1008', roles: [{ role: 'root', db: 'admin' }] });
현재 : 생성도안되고 읽기 권한도 x
db.grantRolesToUser('wjdwwidz', [{ role: 'root', db: 'test' }])
db.grantRolesToUser('wjdwwidz', [{ role: 'root', db: 'admin' }])
아예 아무것도 안되는데 최고관리자가 어딨지 하는 의문
Sol 11. Show databases()
mongosh "mongodb+srv://cluster0.igdev0x.mongodb.net/" --apiVersion 1 --username wjdwwidz
접속 이후 Show databases() 명령 실행
Sol 12. db.createUser
db.createUser({ user: 'grantwjdwwidz', pwd: 'create1008', roles: [{ role: 'root', db: 'admin' }] });
이거 다시 먹여보니
MongoServerError: CMD_NOT_ALLOWED: createUser
mongoDB : default가 어드민이 아니라 test로 접속되는 것으로 보임
Sol 13. cmd에러라고 해서 몽고셸 설치할 때 권한아니었던 게 생각나서 확인
=> 문제 없음
Sol 14. Use admin (admin게정으로 바꿔서 확인했을 때 )
(Unauthorized) not authorized on admin to execute command { createUser: "grantwjdwwidz", pwd: "0000000")
: 권한이 없다고나옴
Sol 15. db.getUsers()
MongoServerError: (Unauthorized) not authorized on admin to execute command
Sol 16. show users
MongoServerError: (Unauthorized) not authorized on admin to execute command
=> read 권한도 없다?
어떻게 getUsers(), show users라는 단순 읽기 권한도 없을 수가 있을까?
Sol 17. 위험한 방법 : mongoshell에서 보안 설정을 잠깐 죽인다
Cmd에서
Atlas atlas-2dp758-shard-0 [primary] test> vi /etc/mongod.conf
ReferenceError: vi is not defined
Atlas atlas-2dp758-shard-0 [primary] test> sudo vi/etc/mongod.conf
Uncaught:
SyntaxError: Missing semicolon. (1:4)
나의 경우에는 어제 산 맥북이기 때문에 sudo , vi 이런 명령어 자체가 인식이 안 되어있는 것으로 보였다
Sol 18. 새 계정으로 다시 시도
Add new Database (in atlas web)
아틀라스 웹에서 데이터베이스를 추가한다
=> built in Role
(Atlas admin)
Name : GYJH
PW : 0000
Atlas atlas-2dp758-shard-0 [primary] test> show users
MongoServerError: (Unauthorized) not authorized on admin to execute command
Atlas atlas-2dp758-shard-0 [primary] test> use admin
switched to db admin
Atlas atlas-2dp758-shard-0 [primary] admin> show users
MongoServerError: (Unauthorized) not authorized on admin to execute command
Sol 19. Take this solution...
(Atlas Admin 부분 )
최고관리자 권한 생성을 할 수 있다.