MongoDB 4.2 admin 계정 설정하기

 

MongoDB admin 4.2 계정 설정하기

MongoDB 아틀라스 배포가 아닌, Linux서버에 직접 패키지를 올려 설치하게 되면, Authentication이 없습니다.

저 역시 CentOS7에 커뮤니티를 올려서 사용하고 있어서, 처음에는 /etc/mongo.conf 안의 Bind IP 설정이 허용하는대로 모든 접속을 허용합니다.

OS의 Firewalld 데몬인 떠있다면, Firewall에서 따로 포트 및 서비스를 허용하도록 추가를 해줘야합니다. 내부망에서만 붙거나, 앞단에 방화벽 장비들이 있으면 OS단에서는 중지해도 됩니다.

일단 DB에 누구나 접근이 가능하면 안되기 때문에 Authentication 설정을 해보도록 하겠습니다.

 

Admin 계정 생성

OS 터미널에서 mongodb로 접속하여 use admin 명령으로 admin DB로 이동한 후 아래와 같이 작성합니다.

$ mongo
MongoDB shell version v4.2.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c8dfe45a-84c0-48c3-99e4-39b65a85780c") }
MongoDB server version: 4.2.6
> use admin
switched to db admin
> db.createUser(
...   {
...     user: "admin",
...     pwd: passwordPrompt(), // or cleartext password
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
...   }
... )
Enter password:
Successfully added user: {
	"user" : "admin",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		},
		"readWriteAnyDatabase"
	]
}
> db.auth("admin",passwordPrompt())
Enter password:
1
>
>
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
>

기존에 Admin DB는 존재하지만, Admin 계정이 활성화 되어 있지 않은 상태에서 admin 이라는 이름으로 계정을 설정한 것입니다.

 

security.authorization 옵션 활성화

/etc/mongo.conf 파일 안에 해당 옵션을 활성화 시켜줘야 authentication이 동작을 하기 때문에 파일을 수정해줘야 합니다.

해당 옵션을 변경하면 MongoDB를 재구동 해야하니 주의하시기 바랍니다.

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
    commitIntervalMs: 200

#  engine:
#  wiredTiger:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 4
      journalCompressor: snappy
      directoryForIndexes: false
    collectionConfig:
      blockCompressor: snappy
    indexConfig:
      prefixCompression: true

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.


security:
  authorization: enabled

security 부분의 주석을 제거하고, authorization: enabled 옵션을 넣어 줍니다.

$ systemctl restart mongod

admin 계정으로 접속하는 방법은 아래와 같습니다.

$ mongo -u "admin" -p <your_password> --authenticationDatabase "admin"

or 

$ mongo -u "admin" -p --authenticationDatabase "admin"
MongoDB shell version v4.2.6
Enter password:

또는 mongo shell 안에서 접속할 수 있습니다.

반드시 admin DB로 이동하고 접속을 해야합니다.

use admin

> db.auth("admin", "<your_password>" )
1

or

> db.auth("admin",passwordPrompt())
Enter password:
1

 

You may also like...

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다