MongoDB에는 기본적으로 탑재된 built-in-roles외에 필요에 따라 사용자가 직접 role을 만들 수도 있음.


아래와 같은 장점.

- 원하는 privilege action들만을 조합하여 꼭 필요한 role을 새로 만들 수 있음.

- collection 단위로 권한 부여 가능! (built-in-roles는 DB 단위로 권한 부여 가능)


아래는 사용자 정의 role을 이용하여 collection별로 read, readWrite 권한을 부여하는 예제.


// 사용자 정의 role 생성
// ____________________________________________________________________________
use admin
 
db.createRole({
    // 사용자 정의 role 이름
    role: "userRole1",
    // 권한 리스트
    privileges: [
        // product.inventory collection은 읽기/쓰기 가능 (삭제는 못함)
        {
            resource: {db: "product", collection: "inventory"},
            actions: ["find", "update", "insert"]
        },
        // product.orders collection은 read만 가능
        {
            resource: {db: "product", collection: "orders"},
            actions: ["find"]
        } 
    ],
    // built-in-roles에서 상속받고자 하는 role을 기입. 필수값이므로 없으면 빈 array라도 있어야 함.
    roles: []
})
 
 
// 생성된 권한을 특정 사용자에게 부여
// ____________________________________________________________________________
db.createUser({user: "user1", pwd: "1111", roles: ["userRole1"]})
 
 
// 권한이 부여된 사용자를 이용하여 테스트
// ____________________________________________________________________________
use product

// 성공
db.inventory.insert({no: 1, name: "product1"})
// 실패
db.orders.insert({no: 1, products: [1,2,3]})
 
// 성공
db.inventory.find()
// 성공
db.orders.find()




[참조]

http://docs.mongodb.org/manual/tutorial/define-roles/

http://docs.mongodb.org/manual/reference/privilege-actions/

http://docs.mongodb.org/manual/core/collection-level-access-control/










Posted by bloodguy

댓글을 달아 주세요