[MongoDB] User 및 권한 관리

[원본 링크]

MongoDB는 계정 기반의 접근제어시스템을 제공한다.

계정을 관리하려면 admin db로 먼저 들어가야 한다.
다음 명령은 전체 계정 목록을 조회한다.

use admin
db.getUsers({ usersInfo: { forAllDBs: true } })




계정 추가

계정을 추가하려면 createUser 함수를 사용할 수 있다.
유저네임과 패스워드, 권한 등을 넣어주면 된다.

db.createUser(
{
  user: "<name>",
  pwd: "<cleartext password>"
  customData: { <any information> },
  roles: [
    { role: "<role>", db: "<database>" } | "<role>",
    ...
  ],
  authenticationRestrictions: [
     {
       clientSource: ["<IP>" | "<CIDR range>", ...],
       serverAddress: ["<IP>" | "<CIDR range>", ...]
     },
     ...
  ],
  mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
  passwordDigestor: "<server|client>"
}
)

role에는 단계적으로 read, readWrite, dbAdmin, admin 등이 있다.

만약 특정 DB에 대한 읽기 권한만 가진 계정이 필요하다면, 다음과 같이 만들 수 있다.

db.createUser(
  {
    user: "username",
    pwd: "...",
    roles: [ 
        { role: "read", db: "DB명" }, 
        { db: 'admin', role: 'clusterMonitor' },
    ]
  }
)

admin:clusterMonitor는 처음 접근할때 기본적인 클러스터 정보를 확인해서해서 넣어뒀다. 저거 없으면 COMPASS 같은 도구로 접근이 안된다.

만약 권한을 추가하고 싶다면 grant를

db.grantRolesToUser("viewer", [{ role: "root", db: "admin" }])

권한을 제거하고 싶다면 remove를 사용하면 된다.

db.revokeRolesFromUser("viewer", [{ role: "root", db: "admin" }])



참조
https://www.mongodb.com/ko-kr/docs/manual/reference/method/db.createuser/