[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/