정의
db.createUser(user, writeConcern)메서드가 실행 데이터베이스 에 대한 새 사용자를 만듭니다.
db.createUser()사용자가 데이터베이스 에 이미 존재하는 경우 는 중복 사용자 오류를 반환합니다.중요
Mongo쉬 방법
이 페이지에서는
mongosh메서드를 설명합니다. 이는 데이터베이스 명령 또는 Node.js와 같은 언어별 드라이버에 대한 설명서가 아닙니다.데이터베이스 명령의 경우
createUser명령을 참조하세요.MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 설명서를 참조하세요.
createUser()의 구문은 다음과 같습니다:필드유형설명user문서
생성할 사용자에 대한 인증 및 액세스가 포함된 문서입니다.
writeConcern문서
user문서는 사용자를 정의하며 다음과 같은 형식을 가집니다.팁
메서드/명령 호출에서 암호를 직접 지정하는 대신
passwordPrompt()메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 암호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의mongo셸에서와 마찬가지로 비밀번호를 직접 지정할 수도 있습니다.{ user: "<name>", 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-SHA-1|SCRAM-SHA-256>", ... ], passwordDigestor: "<server|client>" } user문서에 다음과 같은 필드가 있습니다:필드유형설명user문자열
새 사용자의 이름입니다.
pwd문자열
사용자의 비밀번호입니다.
$external데이터베이스 에서db.createUser()를 실행 자격 증명 MongoDB 외부에 저장된 사용자를 생성하는 경우pwd필드 필요하지 않습니다.값은 다음 중 하나일 수 있습니다.
일반 텍스트 문자열로 된 사용자의 비밀번호
passwordPrompt()은(는) 사용자의 비밀번호를 묻는 메시지를 표시합니다.
메서드/명령 호출에서 암호를 직접 지정하는 대신
passwordPrompt()메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 암호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의mongo셸에서와 마찬가지로 비밀번호를 직접 지정할 수도 있습니다.customData문서
선택 사항. 사용자의 전체 이름 또는 직원 ID 와 같이 사용자와 연결하려는 임의의 정보입니다.
roles배열
사용자에게 부여된 역할입니다. 빈 배열
[]을 지정하여 역할이 없는 사용자를 만들 수 있습니다.배열
선택 사항입니다. 서버가 생성된 사용자에게 시행하는 인증 제한 사항입니다. 사용자가 서버에 연결할 수 있거나 서버가 사용자를 받아들일 수 있는 IP 주소 및 CIDR 범위의 목록을 지정합니다.
mechanisms배열
선택 사항입니다. SCRAM 사용자 자격 증명을 생성하기 위한 특정 SCRAM 메커니즘(1개 또는 여러 개)을 지정합니다.
authenticationMechanisms를 지정하면authenticationMechanisms의 하위 집합만 지정할 수 있습니다.유효한 값은 다음과 같습니다.
"SCRAM-SHA-1"SHA-1해시 함수를 사용합니다.
"SCRAM-SHA-256"SHA-256해시 함수를 사용합니다.passwordDigestor가
server여야 합니다.
기본값은
SCRAM-SHA-1과SCRAM-SHA-256모두입니다.passwordDigestor문자열
선택 사항입니다. 서버 또는 클라이언트 중 어느 쪽에서 비밀번호를 해독할지를 나타냅니다.
사용 가능한 값은 다음과 같습니다.
"server"(기본값)- 서버는 클라이언트로부터 다이제스트되지 않은 비밀번호를 수신하여 비밀번호를 다이제스트합니다.
"client"(SCRAM-SHA-256과 호환되지 않음)- 클라이언트는 비밀번호를 다이제스트하고, 이후 다이제스트된 비밀번호를 서버에 전달합니다.
역할
roles 필드에서 기본 제공 역할과 사용자 정의 역할을 모두 지정할 수 있습니다.
db.createUser() 가 실행되는 동일한 데이터베이스 에 존재하는 역할 지정하려면 역할 이름과 함께 역할 지정할 수 있습니다.
"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 의 인증 에 대한 자세한 내용 은 자체 관리형 배포서버에 대한 인증을 참조하세요.
createUser() createUser 명령을 래핑합니다.
호환성
이 메서드는 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
중요
이 명령은 MongoDB Atlas 클러스터에서 지원되지 않습니다. 모든 명령에 대한 Atlas 지원 에 대한 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
행동
사용자 ID
MongoDB는 생성 시 사용자에게 고유한 userId를 자동으로 할당합니다.
복제본 세트
복제본 세트db.createUser() 에서 실행 경우 는 기본값 으로 쓰기 "majority" 고려 (write concern) 사용하여 실행됩니다.
암호화 (Encryption)
경고
기본값 으로 는 를 사용하는 경우에도db.createUser() 지정된 모든 데이터를 일반 텍스트로 MongoDB 인스턴스 에 passwordPrompt() 전송합니다. TLS 전송 암호화 사용하여 에서 보낸 비밀번호를 포함하여 클라이언트와 서버 간의 통신을 db.createUser() 보호합니다. TLS 전송 암호화 활성화하는 방법에 대한 지침은 TLS/SSL 암호화를 위한 MongoDB 인스턴스 구성을 참조하세요.
MongoDB는 비밀번호를 일반 텍스트로 저장하지 않습니다. 비밀번호는 클라이언트와 서버 간의 전송 시 그리고 TLS 전송 암호화가 활성화되지 않은 경우에만 취약합니다.
외부 자격 증명
$external 데이터베이스에서 생성된 사용자는 예를 들어 Kerberos를 사용하는 MongoDB Enterprise 설치와 같이 MongoDB 외부에 자격 증명이 저장되어 있어야 합니다.
$external 인증 사용자(Kerberos, LDAP 또는 X.509 사용자)와 함께 클라이언트 세션 및 인과적 일관성 보장 을 사용하려면 사용자 이름이 10KB보다 클 수 없습니다.
local Database
로컬 데이터베이스에서는 사용자를 생성할 수 없습니다.
필요한 액세스 권한
데이터베이스에서 새 사용자를 생성하려면 해당 데이터베이스 리소스에 대해
createUser작업을 수행할 수 있어야 합니다.
userAdmin 및 userAdminAnyDatabase 기본 제공 역할은 해당 리소스에 대한 createUser 및 grantRole 조치를 제공합니다.
예시
다음 작업은 products 데이터베이스 에 accountAdmin01 사용자를 생성합니다.
팁
메서드/명령 호출에서 암호를 직접 지정하는 대신 passwordPrompt() 메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 암호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo 셸에서와 마찬가지로 비밀번호를 직접 지정할 수도 있습니다.
use products db.createUser( { user: "accountAdmin01", pwd: passwordPrompt(), // Or "<cleartext password>" customData: { employeeId: 12345 }, roles: [ { role: "clusterAdmin", db: "admin" }, { role: "readAnyDatabase", db: "admin" }, "readWrite"] }, { w: "majority" , wtimeout: 5000 } )
이 작업은 accountAdmin01 에 다음과 같은 역할을 부여합니다.
admin데이터베이스의clusterAdmin및readAnyDatabase역할.products데이터베이스의readWrite역할.
역할이 있는 사용자 만들기
다음 작업은 products 데이터베이스에 accountUser를 생성하고 사용자에게 readWrite 및 dbAdmin 역할을 제공합니다.
팁
메서드/명령 호출에서 암호를 직접 지정하는 대신 passwordPrompt() 메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 암호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo 셸에서와 마찬가지로 비밀번호를 직접 지정할 수도 있습니다.
use products db.createUser( { user: "accountUser", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ "readWrite", "dbAdmin" ] } )
역할 없는 사용자 만들기
다음 작업은 admin 데이터베이스에 reportsUser로 이름이 지정된 사용자를 생성하지만 아직 역할을 할당하지는 않습니다.
팁
메서드/명령 호출에서 암호를 직접 지정하는 대신 passwordPrompt() 메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 암호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo 셸에서와 마찬가지로 비밀번호를 직접 지정할 수도 있습니다.
use admin db.createUser( { user: "reportsUser", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ ] } )
역할이 있는 관리 사용자 만들기
다음 연산은 admin 데이터베이스에 appAdmin이라는 사용자를 생성하고, 사용자 readWrite에게 config 데이터베이스에 대한 액세스 권한을 부여하여 해당 사용자가 밸런서 설정과 같은 샤딩된 클러스터의 특정 설정을 변경할 수 있도록 합니다.
팁
메서드/명령 호출에서 암호를 직접 지정하는 대신 passwordPrompt() 메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 암호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo 셸에서와 마찬가지로 비밀번호를 직접 지정할 수도 있습니다.
use admin db.createUser( { user: "appAdmin", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ { role: "readWrite", db: "config" }, "clusterAdmin" ] } )
인증 제한이 있는 사용자 생성하기
다음 작업은 admin 데이터베이스에 restricted라는 사용자를 생성합니다. 이 사용자는 IP 주소 192.0.2.0에서 IP 주소 198.51.100.0으로 연결하는 경우에만 인증할 수 있습니다.
팁
메서드/명령 호출에서 암호를 직접 지정하는 대신 passwordPrompt() 메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 암호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo 셸에서와 마찬가지로 비밀번호를 직접 지정할 수도 있습니다.
use admin db.createUser( { user: "restricted", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ { role: "readWrite", db: "reporting" } ], authenticationRestrictions: [ { clientSource: ["192.0.2.0"], serverAddress: ["198.51.100.0"] } ] } )
SCRAM-SHA-256 자격 증명만으로 사용자 생성
참고
SCRAM-SHA-256을 사용하려면 featureCompatibilityVersion을(를) 4.0(으)로 설정해야 합니다. featureCompatibilityVersion에 대한 자세한 내용은 Get FeatureCompatibilityVersio(FeatureCompatibilityVersion 가져오기) 및 setFeatureCompatibilityVersion을(를) 참조하세요.
다음 작업은 SCRAM-SHA-256 자격 증명만 가진 사용자를 생성합니다.
팁
메서드/명령 호출에서 암호를 직접 지정하는 대신 passwordPrompt() 메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 암호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo 셸에서와 마찬가지로 비밀번호를 직접 지정할 수도 있습니다.
use reporting db.createUser( { user: "reportUser256", pwd: passwordPrompt(), // Or "<cleartext password>" roles: [ { role: "readWrite", db: "reporting" } ], mechanisms: [ "SCRAM-SHA-256" ] } )
authenticationMechanisms 매개변수가 설정된 경우 mechanisms 필드에는 authenticationMechanisms 매개변수에 지정된 값만 포함할 수 있습니다.