본문 바로가기
개발관련

mongodb admin/db별 계정설정

by 딸기별땅 2022. 5. 13.

처음 세팅할때는 뭣모르고 세팅한지라 뭐 기억도 안나고...

이번엔 좀더 이해를 하면서 세팅을 해보았습니다. 

이게 그냥 디비+계정 생성만 하면되는게 아니고 계정에 계층이 있더군요. 

몽고디비가 완전히 설치가 되어있고 터미널에서 사용한다는 전제하에 시작합니당. 

최소 기본적으로 vi사용법은 숙지하고있어야 합니다. 

 

그리고 설치는 어제 회사 콤퓨타로 다했고

오늘 뒤늦게 개인 컴퓨터로 정리하느랴 스크린샷이 없음 -_-ㅋ

 

 

포트번호 변경 또는 보안관련 설정은 리눅스/윈도우의 경우 

vi /etc/mongod.conf

여기 들어가셔서 바꿔주심 되고요

 

Mac M1환경이라면 

vi /opt/homebrew/etc/mongod.conf

이 경로에 있을거에요...제가 인텔 맥으로는 세팅을 안해봐서 모르겠는데

아마 인텔이면은 위에 리눅스/윈도우랑 경로가 같을것으로 추측됩니다. 

아 근데 백스페이스도 안먹고 글자도 잘 안바꿔줘서 중간에 vim설치해서 vim으로 바꿔서 썼음 ㄷ

 

저는 기본포트인 27017이 아니라 27018로 바꿔주었어요.

아! 그리고 미리 말씀드리건대, # security<<이부분은 지금 건드리면 안됩니다.

우린 아직 관리자 계정설정을 안했기 때문에 지금 건드리면 쉘 실행을 못함 ㅋ

 

 

sudo service mongod stop
sudo service mongod start

포트번호를 바꿔주었으므로 몽고를 재시작시켜주었습니다.

몽고디비의 구동상태를 확인하시려면 sudo service mongod status를 보면 됩니다.

정상구동중이라면 터미널에서 초록색 동그라미로 구동상태를 알려줄거에요.

 

 

mongosh

포트변경을 하지 않았다면 위 명령어만으로 몽고쉘을 시작할수 있습니다만

 

mongosh --port 27018

포트를 변경했다면 변경한 포트를 지정해서 실행시켜야 합니다.

 

그럼 아마 초기상태가

test>

이렇게 나올껍니다...

 

test> use admin

입력하시면 'switched to db admin' 라는 문구가 나오고

 

admin>

이렇게 바뀔거에요

 

admin> db.createUser({user:'test', pwd:'test', roles:[{role:'root',db:'admin'}]})

위와같이 어드민 계정을 하나 생성해야 합니다.(일단 만들고 나중에 변경 추가 삭제 가능)

이게 있어야 추후에 security 설정 변경해서 계정을 통해 접속할수가 있어요.

이거는 가장 최상단의 최고 관리자를 생성하는거에요. 

role에  'root' 또는 'userAdminAnyDatabase' 를 입력해야 합니다.

정확한 차이까지는 제대로 찾아보지 못했습니다만 이게 admin에서 사용되는 role입니다. 

 

계정생성이 성공했다면 ok:1이라고 나올겁니다. 

 

db.getUsers()

이렇게 만들어진 admin의 유저목록을 조회할수 있고, 

 

db.admin.deleteOne({'user':'test'})

또는

db.dropUser("test")

를 이용해서 불필요한 admin 계정을 삭제할수도 있습니다. 

 

 

관리자용 계정을 만들었지만.. 프로젝트마다 다르겠지만

실 프로젝트에서 저 admin을 그대로 쓰진 않을껍니다.

아마 database를 하나 만들어서 쓰겠죠.

 

admin> use testdbname

이렇게 하면 아까처럼 switched to 어쩌구 나올꺼고,

testdbname> 으로 바뀌겠죠.

뭔가 이상하죠? create를 해야될거 같은데.. use만 한다고..?

게다가 이상태에서는 show databases;를 해도 안나올겁니다.

왜냐면 최소 row 하나는 생성해놔야 진짜 데이터베이스 저장소가 만들어 지거든요.

 

db.createUser({
    user: 'username',
    pwd: 'password',
    roles: ['dbOwner']
})

또는

db.createUser({
    user: 'username',
    pwd: 'password',
    roles: [{role:'dbOwner', db:'testdbname'}]
})

이렇게 본격 db별 관리자를 생성할수 있습니다.

testdbname에서는 아까처럼 role에 'root'나 'userAdminAnyDatabase' 는 사용할수 없습니다.

이건 admin의 role로 정해진거라서 그렇습니다. 

보안 등의 문제로 권한관리를 나름 엄격히 하도록 만들어진 규칙인것 같습니다. 

 

 

자 일단은 여기까지가 계정설정은 끝이고,

이제 몽고쉘을 아까처럼 아무 절차없이 mongosh , mongosh --port ... 이렇게 접근할수 없도록

맨 위에 말씀드렸던 mongod.conf를 vi로 열고 security의 주석을 푼뒤, 

security: 
	authorization: enabled

이렇게 바꾸고 저장한뒤... 

아까처럼 mongod stop / start 다시 해주시고 나서는

mongosh --port 27018 이런식으로 실행하려하면 에러 날꺼에요.

 

이번에는 

mongosh --port 27018 -u 'test' -p 'test'

이렇게 직접 user/pwd 계정정보를 입력해야 접속이 가능합니다. 

여기서 또 에러난다? 이건 접속정보가 틀린거니까 계정정보 다시 잘 확인해보시구요~

만약에 계정정보가 잘못 만들어진거면? ㅋㅋ;;

위에서부터 다시 해야겠죠 ㅎㅎㅎ 

 

댓글