일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- alarmanager
- schedule
- jobdispatcher
- Library
- PHP
- livedatam
- workmanager
- Android
- firebase
- jobschduler
- Service
- shceduler
- 검사
- epmty
- 빈
- Background
- Job
- Today
- Total
에몽이
mongodb 사용자 관리 본문
MongoDB 설치후 데이터베이스 위치, 로그, 인증 등에 관련한 서버 구성과 설정을 정리한다.
MongoDB 2.6 과 MongoDB Community Edition 3.x 버전을 사용했다.
mongoDB 접근제어
mongoDB 는 설치과정 중에 인증과 관련해 설정하는 부분이 없어서 설치 후 누구나 DB에 접속 할 수 있다. 인증을 추가해 데이터베이스 관리자와 데이터베이스 사용자로 구분해서 이용하고, 각 데이터베이스의 사용자는 허가된 역할(Role)을 가지고 데이터베이스에 접근 가능하도록 구성한다.
여기서는 다음 두 가지를 다루고 있다.
- (1) 데이터베이스 관리자 추가
- (2) 데이터베이스 사용자 추가
Ubuntu/Debian 리눅스 배포본에 MongoDB 3.x 버전이 지원되지 않으면, MongoDB Community Edition 를 패키지 혹은 소스로 설치할 수 있다.
데이터베이스 관리자
mongod가 비인증 모드로 실행중인 상태에서, mongo
클라이언트로 데이터베이스에 접속한다.접속에 성공하면 > 프롬프트가 표시된다. 그리고 접속한 후에 admin 데이터베이스로 전환한다.
> use admin
switched to db admin
>
mongo
클라이언트로 접속해 mongoDB 데이터베이스 관리자 admin 추가해서, 사용자 롤로 userAdminAnyDatabase
롤을 추가해준다.
mongoDB 2.6 이후 관리자 계정 추가
mongoDB 2.6 이후는 db.createUser()
로 사용자를 추가한다. 1 다음은 admin 데이터베이스에서 사용자를 관리하는 admin 계정을 생성하고 있다.
>
> db.createUser({ user:'admin',
pwd:'****',
roles:['userAdminAnyDatabase']
})
Successfully added user: { "user" : "admin", "roles" : [ "userAdminAnyDatabase" ] }
>
> db.getUsers() // 데이터베이스 사용자 확인
[
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
]
mongoDB 2.4 이전 관리자 계정 추가
mongoDB 2.4 까지는 새로운 사용자는 db.addUser()
로 추가한다.2
$ mongo // mongo client 로 접속
>use admin // admin DB 사용
>db.addUser( { user: "<username>", // admin name
pwd: "<password>",
roles: [ "userAdminAnyDatabase" ] // Database role
} )
mongoDB 2.6까지 32bit 버전을 지원하고 있다.
관리자 계정을 만든후 MongoDB에 mongo
클라이언트로 인증 로그인을 한 후에 데이터베이스를 생성하고 해당 데이터베이스 사용자에 접근 권한을 추가해 준다.
데이터 베이스 생성과 롤 기반 인증
관리자 로그인
이제 데이터베이스 관리자 계정으로 로그인해서 사용하려는 데이터베이스를 use
로 선택하고 해당 데이터베이스 사용자를 추가해준다.
mongo
클라이언트 로그인시 -u <username>
, -p <password>
와 --authenticationDatabase <database>
를 지정해 주어야 한다.
$ mongo --port 27017 -u "admin" -p "****" --authenticationDatabase "admin"
MongoDB shell version v3.4.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.0
혹은 인증없이 mongo
클라이언트로 데이터베이스에 접속한 후에 db.auth()
명령을 사용할 수 있다.
> use admin
switched to db admin
> db.auth("admin", "****")
1
> show users
{
"_id" : ObjectId("5733676238ac1ddf4cf745c2"),
"user" : "admin",
"readOnly" : false,
"pwd" : "24413999168dccff96dcc735720c85ce"
}
>
이제 각 데이터베이스에 사용자를 생성해서 사용해서 인증한 사용자만 데이터베이스를 사용하게 할 수 있다.
Database 사용자 추가
mongoDB v3.x 사용자 관리
mongoDB v2.6 히우는 대부분 mongoDB v3.4와 호환되는 사용자 관리 명령을 사용한다. 여기서는 User Management Methods (v3.4)를 참고하고 있다.
Name | Description |
---|---|
db.auth() | 데이터베이스에 사용자 인증 |
db.createUser() | Creates a new user. |
db.updateUser() | Updates user data. |
db.changeUserPassword() | 사용자 패스워드 변경 |
db.dropAllUsers() | 데이터베이스에 관련된 모든 사용자를 삭제한다. |
db.dropUser() | 한 사용자를 삭제한다 |
db.grantRolesToUser() | 롤과 권한을 사용자에 허용한다 |
db.revokeRolesFromUser() | 사용자에 부여한 롤을 삭제한다 |
db.getUser() | 지정한 사용자의 정보를 반환한다 |
db.getUsers() | 데이터베이스에 관련된 모든 사용자의 정보를 반환한다 |
createUser()
db.createUser()
는 두 개의 도큐멘트를 인자로 사용한다:
db.createUser(user, writeConcern)
여기서 user 도큐멘트는 아래 같은 형식을 갖는다:
{ user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]
}
- customData: 선택적으로 추가할 정보를 담은 도큐멘트.
다음은 product 데이터베이스로 전환해서 product 데이터베이스 사용자를 추가하고 있다. customeData 를 주목하자.
> use products
db.createUser( { user: "user1",
pwd: "changeMe",
customData: { employeeId: 12345 }, // prducts
roles: [ { role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" },
"readWrite"] },
{ w: "majority" , wtimeout: 5000 } )
다양한 사례는 createUser() Exmaple 를 참고하자.
mongoDB v2.4는 사용자 추가 방법이 조금 다르다.
mongoDB v2.4 사용자 추가
사용하려는 데이터베이스의 계정으로 접근제어를 추가해 주어야 한다. mongoDB 2.4 까지는 새로운 사용자는 db.addUser()
로 추가한다.3
아래는 데이터베이스 관리자 계정 admin으로 로그인해서, 필요하면 students 데이터베이스를 생성합니다. 그리고 students 데이터베이스 사용자 student 계정을 추가하고 있다.
> use students
switched to db students
> db.addUser('student', '****')
{
"user" : "student",
"readOnly" : false,
"pwd" : "7a70591507db46bdd3df47a213d8922f",
"_id" : ObjectId("57336a71c1ef2bed6688d296")
}
> db.auth('student', '012345')
1
> db.student.save({name:'qkboo', class:'Database', grade:'A'})
> db.student.find()
{ "_id" : ObjectId("57336b7d1be9091521cbeb36"), "name" : "qkboo", "class" : "IoT", "grade" : "A" }
>
이제 mongo
클라이언트로 생성한 students 에 데이터베이스 사용자 student로 로그인한다.
$ mongo student -u student -p ****
MongoDB shell version: 2.4.10
connecting to: student
만약 해당 데이터베이스 사용자가 아닌 계정에서 데이터베이스 접근시 다음 같이 인증되지 않은 접근으로 에러를 발생한다.
$ mongo
MongoDB shell version: 2.4.10
connecting to: test
> use student
switched to db student
> show dbs
Tue Sep 27 23:45:38.269 listDatabases failed:{ "ok" : 0, "errmsg" : "unauthorized" } at src/mongo/shell/mongo.js:46
>
MongoDB에 관련 글
MongoDB Community Edition 시리즈:
- Install MongoDB Community Edition 3.4 for Arm64
- Install MongoDB Community Edition 3.6
- MongoDB User Authentication
MongoDB 관련:
출처 : https://blog.thinkbee.kr/linux/database/mongodb-user-auth/
'DB' 카테고리의 다른 글
mongodb 외부접속 (0) | 2019.03.12 |
---|---|
aws mysql 외부접속 허용 (0) | 2019.03.12 |
mysql 유저 관리 (0) | 2019.03.12 |
mongoDB argeegation개념 (0) | 2019.02.26 |
redis 설치 및 기본 명령어 (0) | 2017.09.14 |