문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

db.createUser()

이 페이지의 내용

  • 정의
  • 행동
  • 필요한 액세스 권한
  • 예제
db.createUser(user, writeConcern)

메서드가 실행되는 데이터베이스에 대한 새 사용자를 만듭니다. 사용자가 데이터베이스에 이미 존재하는 경우 db.createUser()중복 사용자 오류를 반환합니다.

중요

Mongo쉬 방법

이 페이지에서는 mongosh 메서드를 설명합니다. 이는 데이터베이스 명령이나 Node.js와 같은 언어별 드라이버에 대한 설명서가 아닙니다 .

데이터베이스 명령에 대해서는 createUser 명령을 참조하십시오.

MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 설명서를 참조하세요.

레거시 mongo 셸 문서는 해당 MongoDB 서버 릴리스 문서를 참조하세요.

Mongo 셸 V4.4

db.createUser() 메서드의 구문은 다음과 같습니다.

필드
유형
설명
user
문서
생성할 사용자에 대한 인증 및 액세스가 포함된 문서입니다.
writeConcern
문서

선택 사항입니다. 작업에 대한 쓰기 고려 수준입니다. 쓰기 고려 사양을 참조하세요.

user 문서는 사용자를 정의하며 다음과 같은 형식을 가집니다.

mongo 셸 버전 4.2부터 메서드/명령 호출에 비밀번호를 직접 지정하는 대신 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() 은(는) 사용자의 비밀번호를 묻는 메시지를 표시합니다.

mongo 셸 버전 4.2부터 메서드/명령 호출에 비밀번호를 직접 지정하는 대신 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-1SCRAM-SHA-256 모두입니다.

passwordDigestor
문자열

선택 사항입니다. 서버 또는 클라이언트 중 어느 쪽에서 비밀번호를 해독할지를 나타냅니다.

사용 가능한 값은 다음과 같습니다.

  • "server" (기본값)
    서버는 클라이언트로부터 다이제스트되지 않은 비밀번호를 수신하여 비밀번호를 다이제스트합니다.
  • "client" (SCRAM-SHA-256과 호환되지 않음)
    클라이언트는 비밀번호를 다이제스트하고, 이후 다이제스트된 비밀번호를 서버에 전달합니다.

roles 필드에서 기본 제공 역할사용자 정의 역할을 모두 지정할 수 있습니다.

db.createUser() 가 실행되는 동일한 데이터베이스에 존재하는 역할을 지정하려면 역할 이름과 함께 역할을 지정할 수 있습니다.

"readWrite"

또는 다음과 같이 문서로 역할을 지정할 수도 있습니다.

{ role: "<role>", db: "<database>" }

다른 데이터베이스에 존재하는 역할을 지정하려면 문서를 사용하여 역할을 지정합니다.

authenticationRestrictions 문서에는 다음 필드 포함될 수 있습니다. authenticationRestrictions 문서에 인식할 수 없는 필드가 포함되어 있으면 서버에서 오류를 발생시킵니다.

필드 이름
설명
clientSource
IP 주소 및/또는 CIDR 범위의 배열
존재하는 경우, 사용자를 인증할 때 서버는 클라이언트의 IP 주소가 지정된 목록에 있거나 목록에 있는 CIDR 범위에 속하는지 확인합니다. 클라이언트의 IP 주소가 없는 경우 서버는 사용자를 인증하지 않습니다.
serverAddress
IP 주소 및/또는 CIDR 범위의 배열
클라이언트가 연결할 수 있는 IP 주소 또는 CIDR 범위의 목록입니다. 존재하는 경우, 서버는 주어진 목록의 IP 주소를 통해 클라이언트의 연결이 승인되었는지 확인합니다. 인식할 수 없는 IP 주소를 통해 연결이 수락된 경우 서버는 사용자를 인증하지 않습니다.

중요

사용자가 인증 제한이 호환되지 않는 여러 역할을 상속하는 경우 해당 사용자는 사용할 수 없게 됩니다.

예를 들어, 사용자가 clientSource 필드가 ["198.51.100.0"]인 역할과 clientSource 필드가 ["203.0.113.0"]인 다른 역할을 상속하는 경우 서버는 사용자를 인증할 수 없습니다.

MongoDB의 인증에 대한 자세한 내용은 인증을 참조하세요.

db.createUser() 메서드는 createUser 명령을 래핑합니다.

버전 4.0.9부터 MongoDB는 생성 시 사용자에게 고유한 userId를 자동으로 할당합니다.

복제본 세트에서 실행하는 경우 db.createUser() 는 기본적으로 "majority" 쓰기 고려를 사용하여 실행됩니다.

경고

기본적으로 db.createUser()passwordPrompt() 를 사용하는 경우에도 지정된 모든 데이터를 일반 텍스트로 MongoDB 인스턴스에 전송합니다. TLS 전송 암호화를 사용하여 db.createUser() 에서 보낸 비밀번호를 포함하여 클라이언트와 서버 간의 통신을 보호합니다. TLS 전송 암호화를 활성화하는 방법에 대한 지침 은 TLS/SSL을 위한 mongodmongos 구성을 참조하세요.

MongoDB는 비밀번호를 일반 텍스트로 저장하지 않습니다. 비밀번호는 클라이언트와 서버 간의 전송 시 그리고 TLS 전송 암호화가 활성화되지 않은 경우에만 취약합니다.

$external 데이터베이스에서 생성된 사용자는 예를 들어 Kerberos를 사용하는 MongoDB Enterprise 설치와 같이 MongoDB 외부에 자격 증명이 저장되어 있어야 합니다.

2} 인증 사용자(Kerberos, LDAP 또는 x.509 사용자)와 함께 클라이언트 세션 및 인과적 일관성 보장을 사용하려면 사용자 이름이 10KB보다 클 수 없습니다. $external

로컬 데이터베이스에서는 사용자를 생성할 수 없습니다.

userAdminuserAdminAnyDatabase 기본 제공 역할은 해당 리소스에 대한 createUsergrantRole 조치를 제공합니다.

다음 db.createUser() 작업은 products 데이터베이스에 accountAdmin01 사용자를 생성합니다.

mongo 셸 버전 4.2부터 메서드/명령 호출에 비밀번호를 직접 지정하는 대신 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 데이터베이스의 clusterAdminreadAnyDatabase 역할.

  • products 데이터베이스의 readWrite 역할.

다음 작업은 products 데이터베이스에 accountUser를 생성하고 사용자에게 readWritedbAdmin 역할을 제공합니다.

mongo 셸 버전 4.2부터 메서드/명령 호출에 비밀번호를 직접 지정하는 대신 passwordPrompt() 메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 비밀번호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo 셸에서와 마찬가지로 비밀번호를 직접 지정할 수 있습니다.

use products
db.createUser(
{
user: "accountUser",
pwd: passwordPrompt(), // Or "<cleartext password>"
roles: [ "readWrite", "dbAdmin" ]
}
)

다음 작업은 admin 데이터베이스에 reportsUser로 이름이 지정된 사용자를 생성하지만 아직 역할을 할당하지는 않습니다.

mongo 셸 버전 4.2부터 메서드/명령 호출에 비밀번호를 직접 지정하는 대신 passwordPrompt() 메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 비밀번호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo 셸에서와 마찬가지로 비밀번호를 직접 지정할 수 있습니다.

use admin
db.createUser(
{
user: "reportsUser",
pwd: passwordPrompt(), // Or "<cleartext password>"
roles: [ ]
}
)

다음 연산은 admin 데이터베이스에 appAdmin이라는 사용자를 생성하고, 사용자 readWrite에게 config 데이터베이스에 대한 액세스 권한을 부여하여 해당 사용자가 밸런서 설정과 같은 샤드 클러스터의 특정 설정을 변경할 수 있도록 합니다.

mongo 셸 버전 4.2부터 메서드/명령 호출에 비밀번호를 직접 지정하는 대신 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으로 연결하는 경우에만 인증할 수 있습니다.

mongo 셸 버전 4.2부터 메서드/명령 호출에 비밀번호를 직접 지정하는 대신 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을 사용하려면 featureCompatibilityVersion을(를) 4.0(으)로 설정해야 합니다. featureCompatibilityVersion에 대한 자세한 내용은 Get FeatureCompatibilityVersio(FeatureCompatibilityVersion 가져오기)setFeatureCompatibilityVersion을(를) 참조하세요.

다음 작업은 SCRAM-SHA-256 자격 증명만 가진 사용자를 생성합니다.

mongo 셸 버전 4.2부터 메서드/명령 호출에 비밀번호를 직접 지정하는 대신 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 매개변수에 지정된 값만 포함할 수 있습니다.

← db.changeUserPassword()