MongoDB] 설치 & 권한 설정
CentOS 7에서 MongoDB를 설치하고 권한을 설정하여 권한이 없는 사용자는 조회/등록/수정/삭제 기능을 사용하지 못하게 한다. MongoDB는 3.6 버젼 기준으로 설명한다.
1. 패키지 매니저에 MongoDB 추가
먼저 /etc/yum.repos.d/mongodb-org-3.6.repo 파일을 생성하고 다음 내역을 추가 한다.
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
2. MongoDB 설치
MongoDB 패키지 설치를 진행 한다.
sudo yum install -y mongodb-org
설치가 완료 되면 mongod 프로세스를 시작한다.
sudo service mongod start
프로세스에 대한 정지 명령어는 다음과 같다.
sudo service mongod stop
만약 MongoDB를 삭제 하려면, mongod 프로세스를 정지 하고 mongodb 패키지를 삭제 한다.
sudo yum erase $(rpm -qa | grep mongodb-org)
설치가 완료 되었으면 설치된 MongoDB로 접속 하여 테스트를 진행 한다.
mongo --host 127.0.0.1:27017
3. MongoDB 사용자 추가
먼저 admin 권한을 설정한다.
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
MongoDB 서비스를 재시작 하고, 접속시 로그인을 해보자
# 접속시 ID/PW 작성
mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
# 접속후 Login
mongo --port 27017
use admin
db.auth("myUserAdmin", "abc123" )
# 계정 추가
use test
db.createUser(
{
user: "myTester",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "reporting" } ]
}
)
하지만 아직까지는 Login을 하지 않아도 조회/등록등의 기능이 가능하다.
4. MongoDB 권한 설정
/etc/mongod.conf 설정 파일에서 다음 항목을 수정한다.
security:
authorization: "enabled"
MongoDB 서비스를 재기동 하고 접속 테스트를 한다.
sudo service mongod restart
로그인 이후에 데이터 조회나 등록을 하려고 하면 권한이 없다는 메시지가 표출 된다.
mongo --port 27017
> db.test.insert( {x:1, y:1} )
WriteResult({
"writeError" : {
"code" : 13,
"errmsg" : "not authorized on test to execute command { insert: \"test\", ordered: true, $db: \"test\" }"
}
})
> db.test.find( {} )
Error: error: {
"ok" : 0,
"errmsg" : "not authorized on test to execute command { find: \"test\", filter: {}, $db: \"test\" }",
"code" : 13,
"codeName" : "Unauthorized"
}
# 로그인 진행
> db.auth('myTester', 'xyz123')
1
> db.test.find( {} )
{ "_id" : ObjectId("5b0b8c26efefcbe94ba75c29"), "x" : 1, "y" : 1 }
> db.test.insert( {x:1, y:1} )
WriteResult({ "nInserted" : 1 })
> db.test.find( {} )
{ "_id" : ObjectId("5b0b8c26efefcbe94ba75c29"), "x" : 1, "y" : 1 }
{ "_id" : ObjectId("5b0b8d6753b23794e42015e9"), "x" : 1, "y" : 1 }