updateUser
정의
updateUser
명령을 실행하는 데이터베이스에서 사용자 프로필을 업데이트합니다. 필드를 업데이트하면 사용자의
roles
및authenticationRestrictions
배열에 대한 업데이트를 포함하여 이전 필드 값이 완전히 대체됩니다.팁
mongosh
에서 이 명령은db.changeUserPassword()
도우미 메서드를 통해서도 실행할 수 있습니다.헬퍼 메서드는
mongosh
사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 못할 수 있습니다. 편의가 필요하지 않거나 추가 리턴 필드가 필요한 경우 데이터베이스 명령을 사용합니다.경고
roles
배열을 업데이트하면 이전 배열의 값이 완전히 대체됩니다. 사용자의 기존 역할을 모두 바꾸지 않고 역할을 추가하거나 제거하려면grantRolesToUser
또는revokeRolesFromUser
명령을 사용합니다.사용자를 업데이트하려면
updateUser
필드와writeConcern
외의 하나 이상의 다른 필드를 지정해야 합니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 M0, M2, M5 및 M10클러스터 이상에서 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
이 명령은 다음과 같은 구문을 사용합니다.
db.runCommand( { updateUser: "<username>", pwd: passwordPrompt(), // Or "<cleartext password>" customData: { <any information> }, roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ], authenticationRestrictions: [ { clientSource: ["<IP>" | "<CIDR range>", ...], serverAddress: ["<IP>", | "<CIDR range>", ...] }, ... ], mechanisms: [ "<scram-mechanism>", ... ], digestPassword: <boolean>, writeConcern: { <write concern> }, comment: <any> } )
명령 필드
이 명령은 다음 필드를 사용합니다.
필드 | 유형 | 설명 |
---|---|---|
| 문자열 | 업데이트할 사용자의 이름입니다. |
| 문자열 | 선택 사항. 사용자의 비밀번호입니다. 값은 다음 중 하나일 수 있습니다.
|
| 문서 | 선택 사항. 모든 임의 정보입니다. |
| 배열 | 선택 사항. 사용자에게 부여된 역할입니다. |
| 문서 | |
| 배열 | 선택 사항. 서버가 사용자에게 적용하는 인증 제한 사항입니다. 사용자가 서버에 연결할 수 있거나 서버가 사용자를 수락할 수 있는 IP 주소 및 CIDR 범위의 목록을 지정합니다. |
| 배열 | 선택 사항. 사용자 자격 증명에 대한 특정 SCRAM 메커니즘(1개 또는 여러 개)입니다. 비밀번호 없이 메커니즘 필드를 업데이트하는 경우 사용자의 현재 메커니즘의 하위 집합만 지정할 수 있으며, 지정된 메커니즘(1개 또는 여러 개)에 대한 기존 사용자 자격 증명만 유지됩니다. 메커니즘과 함께 비밀번호를 업데이트하는 경우 사용자에 대한 자격 증명 세트가 저장됩니다. 유효한 값은 다음과 같습니다.
|
| 부울 | 선택 사항입니다. 서버 또는 클라이언트 중 어느 쪽에서 비밀번호를 해독할지를 나타냅니다.
|
| any | 선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.
댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다. |
역할
roles
필드에서 기본 제공 역할과 사용자 정의 역할을 모두 지정할 수 있습니다.
updateUser
가 실행되는 동일한 데이터베이스에 존재하는 역할을 지정하려면 역할의 이름과 함께 역할을 지정할 수 있습니다.
"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 의 인증 에 대한 자세한 내용 은 자체 관리형 배포서버에 대한 인증을 참조하세요.
행동
경고
기본적으로 updateUser
는 passwordPrompt()
를 사용하는 경우에도 지정된 모든 데이터를 일반 텍스트로 MongoDB 인스턴스에 전송합니다. updateUser
에서 보낸 암호를 포함하여 클라이언트와 서버 간의 통신을 보호하려면 TLS 전송 암호화를 사용합니다. TLS 전송 암호화를 활성화하는 방법에 대한 지침은 TLS/SSL을 위한 mongod
및 mongos
구성을 참조하세요.
MongoDB는 비밀번호를 일반 텍스트로 저장하지 않습니다. 비밀번호는 클라이언트와 서버 간의 전송 시 그리고 TLS 전송 암호화가 활성화되지 않은 경우에만 취약합니다.
필요한 액세스 권한
사용자의 roles
배열을 업데이트하려면 모든 데이터베이스에 대한 revokeRole
조치를 포함하는 액세스 권한이 있어야 합니다.
사용자에 역할을 추가하려면 역할의 데이터베이스에 grantRole
조치가 있어야 합니다.
다른 사용자의 pwd
또는 customData
필드를 변경하려면 해당 사용자의 데이터베이스에 changePassword
및 changeCustomData
조치가 각각 있어야 합니다.
자신의 비밀번호와 사용자 지정 데이터를 수정하려면 사용자 데이터베이스에서 각각 changeOwnPassword
및 changeOwnCustomData
조치를 부여할 수 있는 권한이 있어야 합니다.
예시
다음 사용자 정보가 포함된 products
데이터베이스의 사용자 appClient01
이(가) 제공됩니다.
{ "_id" : "products.appClient01", "userId" : UUID("c5d88855-3f1e-46cb-9c8b-269bef957986"), "user" : "appClient01", "db" : "products", "customData" : { "empID" : "12345", "badge" : "9156" }, "roles" : [ { "role" : "readWrite", "db" : "products" }, { "role" : "read", "db" : "inventory" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] }
다음 updateUser
명령은 사용자의 customData
및 roles
데이터를 완전히 대체합니다.
use products db.runCommand( { updateUser : "appClient01", customData : { employeeId : "0x3039" }, roles : [ { role : "read", db : "assets" } ] } )
products
데이터베이스의 사용자 appClient01
는 이제 다음과 같은 사용자 정보를 갖습니다.
{ "_id" : "products.appClient01", "userId" : UUID("c5d88855-3f1e-46cb-9c8b-269bef957986"), "user" : "appClient01", "db" : "products", "customData" : { "employeeId" : "0x3039" }, "roles" : [ { "role" : "read", "db" : "assets" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] }