정의
- updateRole
- 사용자 정의 역할 업데이트합니다. - updateRole명령은 역할의 데이터베이스 에서 실행 되어야 합니다.- 팁- mongosh에서 이 명령을- db.updateRole()헬퍼 메서드를 통해서도 실행할 수 있습니다.- 헬퍼 메서드는 - mongosh사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 못할 수 있습니다. 편의가 필요하지 않거나 추가 리턴 필드가 필요한 경우 데이터베이스 명령을 사용합니다.- 필드를 업데이트하면 이전 필드의 값이 완전히 대체 됩니다. 모든 값을 바꾸지 않고 역할이나 권한 을 부여하거나 제거하려면 다음 명령 중 하나 이상을 사용합니다. - 경고- privileges또는- roles배열을 업데이트하면 이전 배열의 값이 완전히 바뀝니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
- MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스 
중요
이 명령은 M0, M2, M5 및 M10클러스터 이상에서 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
- MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전 
- MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전 
구문
역할을 업데이트하려면 privileges 배열, roles 배열 또는 둘 다를 제공해야 합니다.
이 명령은 다음과 같은 구문을 사용합니다.
{   updateRole: "<role>",   privileges:       [         { resource: { <resource> }, actions: [ "<action>", ... ] },         ...       ],   roles:       [         { role: "<role>", db: "<database>" } | "<role>",         ...       ],   authenticationRestrictions:       [         {           clientSource: ["<IP>" | "<CIDR range>", ...],           serverAddress: ["<IP>", ...]         },         ...       ]   writeConcern: <write concern document>,   comment: <any> } 
명령 필드
이 명령은 다음 필드를 사용합니다.
| 필드 | 유형 | 설명 | 
|---|---|---|
| 
 | 문자열 | 업데이트할 사용자 정의 역할 역할의 이름입니다. | 
| 
 | 배열 | 선택 사항입니다.  | 
| 
 | 배열 | 선택 사항입니다.  | 
| 
 | 배열 | 선택 사항. .. include:: /includes/fact-auth-restrictions-role-desc.rst | 
| 
 | 문서 | |
| 
 | any | 선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다. 
 댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다. | 
역할
roles 필드에서 기본 제공 역할과 사용자 정의 역할을 모두 지정할 수 있습니다.
updateRole가 실행되는 동일한 데이터베이스에 존재하는 역할을 지정하려면 역할의 이름과 함께 역할을 지정할 수 있습니다.
"readWrite" 
또는 다음과 같이 문서로 역할을 지정할 수도 있습니다.
{ role: "<role>", db: "<database>" } 
다른 데이터베이스에 존재하는 역할을 지정하려면 문서를 사용하여 역할을 지정합니다.
인증 제한
버전 3.6에 새로 추가되었습니다.
authenticationRestrictions 문서에는 다음 필드만 포함될 수 있습니다. authenticationRestrictions 문서에 인식할 수 없는 필드가 포함되어 있으면 서버에서 오류를 발생시킵니다.
| 필드 이름 | 값 | 설명 | 
|---|---|---|
| 
 | IP 주소 및/또는 CIDR 범위의 배열 | 존재하는 경우, 사용자를 인증할 때 서버는 클라이언트의 IP 주소가 지정된 목록에 있거나 목록에 있는 CIDR 범위에 속하는지 확인합니다. 클라이언트의 IP 주소가 없는 경우 서버는 사용자를 인증하지 않습니다. | 
| 
 | IP 주소 및/또는 CIDR 범위의 배열 | 클라이언트가 연결할 수 있는 IP 주소 또는 CIDR 범위의 목록입니다. 존재하는 경우, 서버는 주어진 목록의 IP 주소를 통해 클라이언트의 연결이 승인되었는지 확인합니다. 인식할 수 없는 IP 주소를 통해 연결이 수락된 경우 서버는 사용자를 인증하지 않습니다. | 
중요
사용자가 인증 제한이 호환되지 않는 여러 역할을 상속하는 경우 해당 사용자는 사용할 수 없게 됩니다.
예를 들어, 사용자가 clientSource 필드가 ["198.51.100.0"]인 역할과 clientSource 필드가 ["203.0.113.0"]인 다른 역할을 상속하는 경우 서버는 사용자를 인증할 수 없습니다.
MongoDB의 인증에 대한 자세한 내용은 인증을 참조하세요.
행동
역할의 권한은 역할이 생성된 데이터베이스에 적용됩니다. 역할은 데이터베이스에 있는 다른 역할로부터 권한을 상속받을 수 있습니다. admin 데이터베이스에서 생성된 역할은 모든 데이터베이스 또는 클러스터에 적용되는 권한을 포함할 수 있으며 다른 데이터베이스의 역할로부터 권한을 상속할 수 있습니다.
필요한 액세스 권한
역할을 업데이트하려면 모든 데이터베이스에 revokeRole 작업이 있어야 합니다.
배열을 업데이트하려면 roles 배열에 있는 각 역할의 데이터베이스에 grantRole 작업이 있어야 합니다.
배열을 업데이트하려면 privileges 배열에 있는 각 권한의 데이터베이스에 대해 grantRole 작업이 있어야 합니다. 권한의 리소스가 데이터베이스에 걸쳐 있는 경우 admin 데이터베이스에 grantRole이 있어야 합니다. 권한이 다음 중 하나에 해당하는 경우 권한은 데이터베이스에 걸쳐 있습니다.
- 모든 데이터베이스의 컬렉션 
- 모든 컬렉션 및 모든 데이터베이스 
- cluster리소스
역할의 authenticationRestrictions 문서를 업데이트하려면 대상 역할의 데이터베이스에 setAuthenticationRestriction 작업이 있어야 합니다.
예시
다음은 admin 데이터베이스에서 myClusterwideAdmin 역할을 업데이트하는 updateRole 명령의 예입니다. privileges } 배열과 roles 배열은 모두 선택 사항이지만 둘 중 하나 이상은 필수입니다.
db.adminCommand(    {      updateRole: "myClusterwideAdmin",      privileges:          [            {              resource: { db: "", collection: "" },              actions: [ "find" , "update", "insert", "remove" ]            }          ],      roles:          [            { role: "dbAdminAnyDatabase", db: "admin" }          ],      writeConcern: { w: "majority" }    } ) 
역할의 권한을 보려면 rolesInfo 명령을 사용합니다.