문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

자체 관리형 배포에서 사용자 및 역할 관리

이 페이지의 내용

  • 전제 조건
  • 사용자 정의 역할 생성
  • 기존 사용자의 액세스 권한 수정
  • 기존 사용자의 비밀번호 수정
  • 사용자 역할 보기
  • 역할 권한 보기

이 튜토리얼에서는 자체 관리형 배포서버를 위한 MongoDB의 권한 부여 모델에 따른 사용자 및 역할 관리에 대한 예제를 제공합니다. 새 사용자를 만들려면 자체 관리 배포서버에서 사용자 만들기를 참조하세요.

배포에 대한 액세스 제어를 활성화 한 경우 각 섹션에 지정된 필수 권한을 가진 사용자로 인증해야 합니다. 이 튜토리얼에 나열된 작업을 수행하려면 사용자 관리자에게 특정 데이터베이스에서 userAdminAnyDatabase 역할 또는 userAdmin 역할이 필요합니다. 사용자 관리자를 첫 번째 사용자로 추가하는 방법에 대한 자세한 내용 은 자체 관리 배포서버에서 액세스 제어 활성화를 참조하세요.

참고

MongoDB Atlas에서 사용자 정의 역할을 만들려면 MongoDB Atlas 설명서에서 사용자 지정 역할 추가 를 참조하세요.

역할은 사용자에게 MongoDB 리소스에 대한 액세스 권한을 부여합니다. MongoDB는 관리자가 MongoDB 시스템 액세스 제어에 사용할 수 있는 여러 가지 기본 제공 역할을 지원합니다. 그러나 이러한 역할이 원하는 권한 세트를 설명하지 못하는 경우 특정 데이터베이스에 새로운 역할을 생성할 수 있습니다.

admin 데이터베이스에서 만든 역할을 제외하고 역할은 해당 데이터베이스에 적용되는 권한만 포함할 수 있으며 해당 데이터베이스의 다른 역할로부터만 상속할 수 있습니다.

admin 데이터베이스에서 만든 역할에는 admin 데이터베이스, 다른 데이터베이스 또는 클러스터 리소스에 적용되는 권한이 포함될 수 있으며, admin 데이터베이스뿐만 아니라 다른 데이터베이스의 역할에서 상속될 수 있습니다.

새 역할을 생성하려면 db.createRole() 메서드를 사용해 privileges 배열에 권한을 지정하고 roles 배열에 상속된 역할을 지정합니다.

MongoDB는 데이터베이스 이름과 역할 이름을 결합해 역할을 고유하게 정의합니다. 각 역할의 범위는 역할을 생성한 데이터베이스로 지정되지만, MongoDB는 모든 역할 정보를 admin 데이터베이스의 admin.system.roles 컬렉션에 저장합니다.

데이터베이스에서 역할을 생성하려면 다음 항목이 있어야 합니다.

  • 해당 데이터베이스 리소스에 대한 createRole 작업

  • 해당 데이터베이스에 대한 grantRole 작업이 있으면 새 역할의 권한은 물론 상속의 출처가 될 역할까지 지정할 수 있습니다.

기본 제공 역할인 userAdminuserAdminAnyDatabase은(는) 각자의 리소스에 대해 createRole 작업 및 grantRole 작업을 제공합니다.

authenticationRestrictions이(가) 지정된 역할을 생성하려면 이 역할이 생성되는 데이터베이스 리소스에 대한 setAuthenticationRestriction 작업이 있어야 합니다.

mongosh을(를) 사용해 사용자 지정 역할을 추가하는 방법은 다음 예시를 참조하세요.

다음 예에서는 db.currentOp()db.killOp() 을(를) 모두 실행할 수 있는 권한만 제공하는 manageOpRole 역할을 만듭니다. [1]

참고

사용자는 mongod 인스턴스에 대한 자신의 작업을 보거나 종료하기 위해 특정 권한이 필요하지 않습니다. 자세한 내용은 db.currentOp()db.killOp() 를 참조하세요.

1

전제 조건 섹션에 mongod 지정된 권한으로 mongos 또는 에 연결합니다.

다음 절차에서는 자체 관리형 배포서버에서 액세스 제어 활성화에 생성된 myUserAdmin 를 사용합니다.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'

myUserAdmin에는 admin 및 기타 데이터베이스에서 역할을 생성할 수 있는 권한이 있습니다.

2

manageOpRole 클러스터 리소스 뿐만 아니라 여러 데이터베이스에서 작동하는 권한이 있습니다. 따라서 admin 데이터베이스에서 역할을 만들어야 합니다.

use admin
db.createRole(
{
role: "manageOpRole",
privileges: [
{ resource: { cluster: true }, actions: [ "killop", "inprog" ] },
{ resource: { db: "", collection: "" }, actions: [ "killCursors" ] }
],
roles: []
}
)

새 역할은 모든 작업을 종료할 수 있는 권한을 부여합니다.

경고

실행 중인 작업은 매우 주의해서 종료합니다. 클라이언트가 시작한 작업을 종료하려면 db.killOp() 메서드 또는 killOp 명령만 사용하고 내부 데이터베이스 작업은 종료 하지 마세요 .

[1] 기본 제공 역할 clusterMonitor은(는) 다른 권한과 함께 db.currentOp()을(를) 실행할 수 있는 권한도 제공하며, 기본 제공 역할 hostManager은(는) 다른 권한과 함께 db.killOp()을(를) 실행할 수 있는 권한을 제공합니다.

다음 예에서는 mongostat 를 실행할 수 있는 권한만 제공하는 mongostatRole 이라는 역할을 만듭니다. [2]

1

전제 조건 섹션에 mongod 지정된 권한으로 mongos 또는 에 연결합니다.

다음 절차에서는 자체 관리형 배포서버에서 액세스 제어 활성화에 생성된 myUserAdmin 를 사용합니다.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'

myUserAdmin에는 admin 및 기타 데이터베이스에서 역할을 생성할 수 있는 권한이 있습니다.

2

mongostatRole 클러스터 리소스 에 대해 작동하는 권한이 있습니다. 따라서 admin 데이터베이스에서 역할을 만들어야 합니다.

use admin
db.createRole(
{
role: "mongostatRole",
privileges: [
{ resource: { cluster: true }, actions: [ "serverStatus" ] }
],
roles: []
}
)
[2] 기본 제공 역할 clusterMonitor 는 다른 권한과 함께 mongostat 를 실행할 수 있는 권한도 제공합니다.

다음 예에서는 dropSystemViewsAnyDatabase system.views 모든 데이터베이스에서 collection을 삭제할 수 있는 권한을 제공하는 이라는 역할을 만듭니다.

1

전제 조건 섹션에 mongod 지정된 권한으로 mongos 또는 에 연결합니다.

다음 절차에서는 자체 관리형 배포서버에서 액세스 제어 활성화에 생성된 myUserAdmin 를 사용합니다.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'

myUserAdmin에는 admin 및 기타 데이터베이스에서 역할을 생성할 수 있는 권한이 있습니다.

2

역할에 대해 다음으로 구성된 권한 을 지정합니다.

use admin
db.createRole(
{
role: "dropSystemViewsAnyDatabase",
privileges: [
{
actions: [ "dropCollection" ],
resource: { db: "", collection: "system.views" }
}
],
roles: []
}
)

참고

MongoDB Atlas에서 기존 데이터베이스 사용자의 역할을 수정하려면 MongoDB Atlas 설명서의 데이터베이스 사용자 수정 을 참조하세요.

  • 해당 데이터베이스에 역할을 부여하려면 데이터베이스에 grantRole 작업이 있어야 합니다.

  • 해당 데이터베이스에서 역할을 철회하려면 데이터베이스에 revokeRole 조치가 있어야 합니다.

  • 역할 정보를 확인하려면 해당 역할을 명시적으로 부여 받았거나 역할 데이터베이스에 viewRole 조치가 있어야 합니다.

1

mongod 또는 mongos을(를) 전제 조건 섹션에 지정된 권한을 가진 사용자로 연결합니다.

다음 절차에서는 자체 관리형 배포서버에서 액세스 제어 활성화에 생성된 myUserAdmin 를 사용합니다.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
2

수정할 사용자의 역할과 권한을 표시하려면 db.getUser()db.getRole() 메서드를 사용합니다.

예를 들어 추가 예제 에서 생성된 reportsUser 의 역할을 보려면 다음을 실행하세요.

use reporting
db.getUser("reportsUser")

"accounts" 데이터베이스에서 readWrite 역할이 사용자에게 부여한 권한을 표시하려면 다음을 실행합니다.

use accounts
db.getRole( "readWrite", { showPrivileges: true } )
3

사용자에게 추가적인 권한이 필요한 경우, 사용자에게 필요한 권한이 있는 역할을 부여합니다. 이러한 역할이 존재하지 않을 경우 적절한 권한을 가진 새 역할을 만듭니다.

기존 역할에 의해 제공된 권한의 하위 집합을 철회하려면 원래 역할을 철회하고 필요한 권한만 가진 새로운 역할을 부여해야 합니다. 역할이 존재하지 않을 경우 새 역할을 생성해야 할 수 있습니다.

4

db.revokeRolesFromUser() 메서드를 사용하여 역할을 해지합니다. 다음 예시 작업은 reportsUser 에서 accounts 데이터베이스에 대한 readWrite 역할을 제거합니다.

use reporting
db.revokeRolesFromUser(
"reportsUser",
[
{ role: "readWrite", db: "accounts" }
]
)

db.grantRolesToUser() 메서드를 사용해 역할을 부여합니다. 예를 들어, 다음 작업은 reportsUser 사용자에게 accounts 데이터베이스에서 read 역할을 부여합니다.

use reporting
db.grantRolesToUser(
"reportsUser",
[
{ role: "read", db: "accounts" }
]
)

샤딩된 클러스터의 경우, 명령이 실행되는 mongos에서 사용자에 관한 변경 사항이 즉시 적용됩니다. 하지만 클러스터 내 다른 mongos 인스턴스의 경우에는 사용자 캐시가 업데이트될 때까지 최대 10분이 걸릴 수 있습니다. 자세한 내용은 userCacheInvalidationIntervalSecs을(를) 참조하세요.

참고

기존 MongoDB Atlas 사용자의 비밀번호를 수정하려면 MongoDB Atlas 설명서에서 데이터베이스 사용자 수정 을 참조하세요.

데이터베이스에서 다른 사용자의 비밀번호를 수정하려면 해당 데이터베이스에 changePassword 조치가 있어야 합니다.

1

전제 조건 섹션에 지정된 권한을 사용해 mongod 또는 mongos에 연결합니다.

다음 절차에서는 자체 관리형 배포서버에서 액세스 제어 활성화에 생성된 myUserAdmin 를 사용합니다.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
2

사용자 이름과 새 비밀번호를 db.changeUserPassword() 메서드에 전달합니다.

다음 작업은 reporting 사용자의 비밀번호를 SOh3TbYhxuLiW8ypJPxmt1oOfL 로 변경합니다.

db.changeUserPassword("reporting", "SOh3TbYhxuLiW8ypJPxmt1oOfL")

다음도 참조하세요.

참고

MongoDB Atlas에서 사용자의 역할을 보려면 MongoDB Atlas 설명서에서 데이터베이스 사용자 및 인증서 보기 를 참조하세요.

다른 사용자의 정보를 확인하려면 다른 사용자의 데이터베이스에 viewUser 조치가 있어야 합니다.

사용자는 자신의 정보를 확인할 수 있습니다.

1

mongod 또는 mongos을(를) 전제 조건 섹션에 지정된 권한을 가진 사용자로 연결합니다.

다음 절차에서는 자체 관리형 배포서버에서 액세스 제어 활성화에 생성된 myUserAdmin 를 사용합니다.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
2

usersInfo 명령 또는 db.getUser() 메서드를 사용해 사용자 정보를 표시합니다.

예를 들어 추가 예제 에서 생성된 reportsUser 의 역할을 보려면 다음을 실행하세요.

use reporting
db.getUser("reportsUser")

반환된 문서에서 roles 필드에는 reportsUser 에 대한 모든 역할이 표시됩니다.

...
"roles" : [
{ "role" : "readWrite", "db" : "accounts" },
{ "role" : "read", "db" : "reporting" },
{ "role" : "read", "db" : "products" },
{ "role" : "read", "db" : "sales" }
]

참고

MongoDB Atlas에서 역할의 권한을 보려면 MongoDB Atlas 설명서에서 사용자 지정 역할 보기 를 참조하세요.

역할 정보를 확인하려면 해당 역할을 명시적으로 부여 받았거나 역할 데이터베이스에 viewRole 조치가 있어야 합니다.

1

mongod 또는 mongos을(를) 전제 조건 섹션에 지정된 권한을 가진 사용자로 연결합니다.

다음 절차에서는 자체 관리형 배포서버에서 액세스 제어 활성화에 생성된 myUserAdmin 를 사용합니다.

mongosh --port 27017 -u myUserAdmin -p 'abc123' --authenticationDatabase 'admin'
2

지정된 역할에 대해 db.getRole() 메서드 또는 rolesInfo 명령을 showPrivileges 옵션과 함께 사용합니다.

예를 들어, products 데이터베이스에서 read 역할에 의해 부여된 권한을 보려면 다음과 같은 작업을 사용할 수 있습니다.

use products
db.getRole( "read", { showPrivileges: true } )

반환된 문서에서는 privilegesinheritedPrivileges 배열입니다. privileges의 경우 역할에 의해 직접적으로 지정된 권한만 표시되며 다른 역할로부터 상속받은 권한은 제외됩니다. inheritedPrivileges의 경우 이 역할에 의해 부여된 모든 권한(직접적으로 지정되거나 상속된 권한 모두)이 표시됩니다. 다른 역할에서 상속되지 않은 역할의 경우 두 필드는 동일합니다.

...
"privileges" : [
{
"resource": { "db" : "products", "collection" : "" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
},
{
"resource" : { "db" : "products", "collection" : "system.js" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
}
],
"inheritedPrivileges" : [
{
"resource": { "db" : "products", "collection" : "" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
},
{
"resource" : { "db" : "products", "collection" : "system.js" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
}
]

돌아가기

사용자 정의 역할