정의
createRoleCreates a role and specifies its privileges. The role applies to the database on which you run the command. The
createRolecommand returns a duplicate role error if the role already exists in the database.팁
In
mongosh, this command can also be run through thedb.createRole()helper method.Helper methods are convenient for
mongoshusers, but they may not return the same level of information as database commands. In cases where the convenience is not needed or the additional return fields are required, use the database command.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
중요
이 명령은 MongoDB Atlas 클러스터에서 지원되지 않습니다. 모든 명령에 대한 Atlas 지원에 관해 자세히 알아보려면 지원되지 않는 명령을 참조하세요.
구문
명령은 다음과 같은 구문을 가집니다:
db.adminCommand( { createRole: "<new role>", privileges: [ { resource: { <resource> }, actions: [ "<action>", ... ] }, ... ], roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ], authenticationRestrictions: [ { clientSource: ["<IP>" | "<CIDR range>", ...], serverAddress: ["<IP>" | "<CIDR range>", ...] }, ... ], writeConcern: <write concern document>, comment: <any> } )
명령 필드
The createRole command has the following fields:
필드 | 유형 | 설명 |
|---|---|---|
| 문자열 | 새 역할의 이름입니다. |
| 배열 | 역할에 부여할 권한입니다. 권한은 리소스와 허용된 작업으로 구성됩니다. 권한의 구문은
|
| 배열 | 이 역할에게 권한을 상속해 주는 역할의 배열입니다.
|
| 배열 | 선택 사항. 서버가 이 역할에 대해 시행하는 인증 제한입니다. 이 역할을 부여받은 사용자에게 연결이 허용되거나 연결할 수 있는 IP 주소 및 CIDR 범위의 목록을 지정합니다. |
| 문서 | |
| any | 선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.
댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다. |
역할
roles 필드에서 기본 제공 역할과 사용자 정의 역할을 모두 지정할 수 있습니다.
To specify a role that exists in the same database where createRole runs, you can either specify the role with the name of the role:
"readWrite"
또는 다음과 같이 문서로 역할을 지정할 수도 있습니다.
{ role: "<role>", db: "<database>" }
다른 데이터베이스에 존재하는 역할을 지정하려면 문서를 사용하여 역할을 지정합니다.
인증 제한
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 데이터베이스에서 생성된 역할은 모든 데이터베이스 또는 클러스터에 적용되는 권한을 포함할 수 있으며 다른 데이터베이스의 역할로부터 권한을 상속할 수 있습니다.
필요한 액세스 권한
데이터베이스에서 역할을 생성하려면 다음 항목이 있어야 합니다.
해당 데이터베이스 리소스에 대한
createRole작업
기본 제공 역할인 userAdmin 및 userAdminAnyDatabase은(는) 각자의 리소스에 대해 createRole 작업 및 grantRole 작업을 제공합니다.
authenticationRestrictions이(가) 지정된 역할을 생성하려면 이 역할이 생성되는 데이터베이스 리소스에 대한 setAuthenticationRestriction 작업이 있어야 합니다.
예시
The following createRole command creates the myClusterwideAdmin role on the admin database:
db.adminCommand({ createRole: "myClusterwideAdmin", privileges: [ { resource: { cluster: true }, actions: [ "addShard" ] }, { resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] }, { resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] }, { resource: { db: "", collection: "" }, actions: [ "find" ] } ], roles: [ { role: "read", db: "admin" } ], writeConcern: { w: "majority" , wtimeout: 5000 } })