MySQL에 Workbench가 존재한다면 MongoDB에는 MongoDB Compass가 존재한다!
MongoDB Compass 다운로드
해당 링크에서 각자 환경에 맞는 버전의 MongoDB Compass를 설치한다.
MongoDB Compass로 DB 접속하기
연결
MongoDB 설치 시 별도의 권한 설정이나 port 지정을 하지 않았다면 위의 초기 설정에서 바로 Connect를 연결하면 로컬 DB로 정상 연결되는 것을 확인할 수 있다.
연결 후 최초 화면
* 나의 경우 로컬 MongoDB의 port를 37017로 지정해 37017로 연결되는 것이 정상이다
별도의 설정 없이 MongoDB를 설치했을 경우 해당 DB는 모든 연결에 대해 열려 있게 되므로 (처음 연결 시 username과 password 같은 인증 정보를 입력하지 않았음에도 정상 연결이 되었던 것!) 이후 추가 작업을 통해 인증된 사용자만 DB에 접속할 수 있도록 설정해보자.
MongoDB 기본 설정 확인하기
MongoDB Shell 오픈
우측 하단의 화살표 표시 또는 좌측 하단의 _MONGOSH를 클릭해서 MongoDB Compass에 내장된 MongoDB Shell을 오픈할 수 있다.
초기에 연결되어 있는 test는 MongoDB의 default database이므로 우리는 권한 설정을 이어가기 위해 admin database로 이동해 작업을 계속한다.
admin database로 이동
use admin
현재 등록 사용자 확인
show users
현재 admin database의 collection 보기
show collections
현재 admin database에는 어떠한 사용자 정보도 존재하지 않고, 기본 설정 정보인 system.version
collection만 존재하는 것을 확인할 수 있다. 한번 설치된 MongoDB의 버전 어떻게 지정되어 있는지 확인해보면,
Docker로 설치한 버전이 잘 적용되어 있는 것을 확인할 수 있다.
이제 기본적인 확인 절차가 끝났으므로, 아무나 DB에 접근할 수 없도록 계정을 생성해보자.
MongoDB 접근 계정 생성하기
방금까지 접속되어 있던 admin databse에서 작업을 계속한다.
사용자 생성 명령어 알아보기
MongoDB의 공식 문서의 db.createUser() 관련 부분을 참조해 명령어를 먼저 파악해보자.
{
user: "<name>",
pwd: passwordPrompt(), // Or "<cleartext password>"
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
authenticationRestrictions: [
{
clientSource: ["<IP>" | "<CIDR range>", ...],
serverAddress: ["<IP>" | "<CIDR range>", ...]
},
...
],
mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
passwordDigestor: "<server|client>"
}
추가로 지정할 수 있는 여러 옵션들이 잇지만, 내가 원하는 건 단순하게 DB에 접근할 권한 통제 정도이므로 user, password, roles 정도의 옵션만 지정해 사용하면 될 것 같다.
현재 DB에 어떠한 계정도 존재하지 않으므로, 모든 권한을 가지는 관리자 계정을 만드는 것을 목적으로 roles 부분을 어떻게 지정해야 하는지 알아보자.
MongoDB 권한 정보 알아보기
userAdminAnyDatabase
The userAdminAnyDatabase role does not restrict the privileges that a user can grant. As a result, userAdminAnyDatabase users can grant themselves privileges in excess of their current privileges and even can grant themselves all privileges, even though the role does not explicitly authorize privileges beyond user administration. This role is effectively a MongoDB system superuser.
사용자 생성 명령어 실행
db.createUser(
{
user: "username",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
Ref.
'back-end > db' 카테고리의 다른 글
MongoDB/ Window local 환경에서 Docker로 MongoDB 실행하기 (0) | 2023.07.24 |
---|