MongoDB의 접근 제어(사용자 인증)를 활성화하는 방법
MongoDB는 초기 설정이 끝나면 액세스 제어없이 무제한으로 액세스 할 수 있다. 실제 운영으로 이대로 무제한 허가는 있을 수 없기 때문에, 액세스 제어(사용자 인증, 역할 제어)를 유효하게 해야 한다.
여기에서는 가장 단순한 싱글 서버를 전제로 한 액세스 제어 방법에 대해 정리한다.
사용자 관리에 관한 정보
우선은 사용자 관리에 관한 각종 정보와 그 저장소에 대해 알아보겠다.
사용자 정보가 저장된 데이터베이스는 admin
으로, admin
데이터베이스의 system.users
컬렉션에 사용자 정보가 존재한다.
사용자 관리가 가능한 역할에는 userAdmin
과 userAdminAnyDatabase
이렇게 두 가지 유형이 있다.
userAdmin
는 지정된 데이터베이스에 대해서만 사용자 관리를 수행할 수 있는 역할이다.userAdminAnyDatabase
: 이 역할이 부여된 사용자는 모든 데이타베이스에 대한 사용자 관리를 할 수 있다.
사용자 인증 사용 절차
대략적인 절차는 다음과 같다. 기본적으로 MongoDB 서버에서 작업한다고 가정하여 명령을 작성한다.
- 관리 사용자 추가
- MongoDB 재부팅
- 일반 사용자 추가
- 사용자 이름과 암호를 지정하여 데이터베이스에 연결
관리 사용자 추가
- 액세스 제어없이 MongoDB 시작
mongod --dbpath "C:\data\db"
- MongoDB에 연결
mongo
- 사용자 관리자 만들기
admin
데이터베이스에 연결하여 다음 명령을 실행하여 사용자 관리자를 생성한다. 생성하고 있는 사용자 이름은admin
이다.use admin db.createUser({ user: 'admin', pwd: 'password', roles: [{ role: 'userAdminAnyDatabase', db: 'admin' }] })
MongoDB 재부팅
- MongoDB 서버를 액세스 제어로 재부팅
※ MongoDB 구성 파일을 사용하여 기동하는 방법은 “MongoDB 구성 파일 설정”을 참조하자.
mongod --auth --dbpath "C:\data\db"
일반 사용자 추가
-
사용자 이름과 비밀번호를 지정하여 사용자 관리자로 MongoDB에 연결 액세스 제어를 활성화한 MongoDB에 연결하는 방법은 “MongoDB 연결과 동시에 인증하는 방법"과 “MongoDB 연결 후 사용자 인증하는 방법"이 있다.
-
MongoDB 연결과 동시에 인증하는 방법
mongo
명령의-u <username>
,-p <password>
,-authenticationDatabase <databasename>
옵션을 사용하여 연결한다.mongo -u "admin" -p "password" -authenticationDatabase "admin"
-
MongoDB 연결 후 사용자 인증하는 방법
우선은 평소대로 MongoDB에 접속한다.mongo
인증이 필요한 데이터베이스로 전환하여
db.auth(<username>, <password>)
메소드로 인증한다.use admin db.auth("admin", "password")
-
-
일반적으로 데이터베이스에 액세스할 수 있는 사용자 만들기
사용자 관리자를 만들고 액세스 제어를 활성화하면 권한이 없는 데이터베이스에는 액세스할 수 없다. 사용하는 각 데이터베이스마다 사용자를 만들어야 한다.
아래에서는
test
데이터베이스에 연결하여user1
사용자를readWrite
역할로 추가한다. 그 외에 역할은 아래의 내장 역할을 참조한다.use test db.createUser({ user: "user1", pwd: "password", roles: [{ role: "readWrite", db: "test" }] })
사용자 이름과 암호를 지정하여 데이터베이스에 연결
-
일반적으로 데이터베이스에 추가한 사용자로 연결 접속 방법은 관리 사용자의 액세스 방법과 같이 “MongoDB 접속과 동시에 인증하는 방법"과 “MongoDB 접속 후에 사용자 인증하는 방법"이 있다. 내용은 동일하기 때문에 자세한 내용은 생략한다.
- MongoDB 연결과 동시에 인증하는 방법
mongo -u "user1" -p "password" -authenticationDatabase "test"
- MongoDB 연결 후 사용자 인증하는 방법
mongo
use test db.auth("user1", "password")
- MongoDB 연결과 동시에 인증하는 방법
MongoDB 구성 파일 설정
일반적으로 동작으로 생각하면 명령을 실행하여 MongoDB 서버를 시작하지 않는다. MongoDB 구성 파일에 기동 옵션을 지정하고, 그 구성 파일을 읽고 시작하는 작업이 될 것이다.
여기에서는 액세스 제어를 활성화하는 MongoDB 구성 예제과 기동하는 명령은 아래와 같다.
mogodb.config
systemLog:
destination: file
path: C:\mongodb\server\log\mongod.log
security:
authorization: enabled
storage:
dbPath: C:\mongodb\server\data
MongoDB 서버 시작
mongod --config "C:\data\mongod.config"
※ MongoDB 구성 파일 옵션에 대한 자세한 내용은 MongoDB - Configuration File Options를 참조한다.
내장 역할
MongoDB에는 몇 가지 기본 제공 역할이 있다. 여기에서는 그 중에서도 사용할 것 같은 것을 몇개 뽑아서 소개한다.
데이터베이스 사용자 역할
역할 | 설명 |
---|---|
read |
모든 비시스템 콜렉션에 대한 읽기 권한과 system.indexes.system.js 및 system.namespaces 시스템 콜렉션에 대한 읽기 권한. |
readWrite |
read 역할 외에 모든 비 시스템 콜렉션 변경 및 system.js 시스템 콜렉션 변경 권한. |
데이터베이스 관리 역할
역할 | 설명 |
---|---|
dbAdmin |
스키마에 대한 태스크, 인덱스, 통계 정보 취득 등의 관리 업무에 관한 권한. 이 권한에는 사용자 관리 또는 역할 관리에 대한 권한이 포함되지 않는다. |
dbOwner |
데이터베이스 관리자로서의 권한. 이 권한에는 readWrite , dbAdmin , userAdmin 권한이 포함된다. |
userAdmin |
데이터베이스에 대한 사용자 및 역할을 관리하는 권한.userAdmin 역할은 데이터베이스에 대한 액세스 권한을 자신을 포함하여 모든 사용자에게 부여할 수 있다. 따라서 admin 데이터베이스의 userAdmin 역할의 경우 수퍼 유저와 간접적으로 같은 의미가 된다. |