error

[MongoDB] MongoServerError: bad auth : authentication failed

wjdwwidz 2023. 10. 9. 03:24
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


상황을 정리해보면

=> 뭔가 엄청나게 중요한 설정을 딱 하나 놓친 것 같다는 생각 (모든 권한이 다 막혀있다 )

  1. mongoDB 접속이 안되는 문제 발생 ( 로컬에서 발생 => db연결시 admin 계정이 아니어서 권한문제가 뜨나?)
  2. 그러면 admin계정에 생성해야겟다
  3. 그런데 이미 있는 계정에 admin권한(root) 을 주는 것도 안되고
  4. 생성하는 것도 안된다.

그래서 지금 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 부분 )

최고관리자 권한 생성을 할 수 있다.