CREATE USER (Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric의 SQL 데이터베이스

현재 데이터베이스에 사용자를 추가합니다. 다음 목록은 13가지 유형의 사용자와 가장 기본적인 문법 샘플을 보여줍니다:

Note

Microsoft Entra ID는 Azure AD(Azure Active Directory)의 새 이름이지만, 기존 환경의 중단을 방지하기 위해 UI 필드, 연결 공급자, 오류 코드 및 cmdlet과 같은 일부 하드 코딩된 요소에는 여전히 Azure AD가 남아 있습니다. 이 문서에서는 두 이름을 혼용할 수 있습니다.

로그인을 기반으로 하는 사용자 master

  • Windows Active Directory 계정을 기반으로 하는 로그인 기반 사용자입니다. CREATE USER [Contoso\test];

  • Windows 그룹을 기반으로 하는 로그인 기반 사용자 CREATE USER [Contoso\Sales];

  • SQL Server 인증을 사용하는 로그인 기반 사용자입니다. CREATE USER Mary;

  • Microsoft Entra 로그인을 기반으로 하는 사용자입니다. CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com]

    Note

    Microsoft Entra 서버 보안 주체(로그인) 는 현재 Azure SQL Database에 대한 공개 미리 보기로 제공됩니다.

    Note

    Microsoft Fabric의 SQL 데이터베이스는 로그인이나 로그인 기반 사용자를 지원하지 않습니다.

데이터베이스에서 인증하는 사용자 - 포함된 사용자를 활용해 데이터베이스를 더 휴대하기 쉽게 만듭니다.
Azure SQL Database에서는 항상 허용됩니다. SQL Server에 포함된 데이터베이스에서만 사용할 수 있습니다.

  • 로그인이 없는 Windows 사용자 기반 사용자 CREATE USER [Contoso\test];

  • 로그인이 없는 Windows 그룹 기반 사용자 CREATE USER [Contoso\Sales];

  • Microsoft Entra 사용자를 기반으로 하는 SQL Database 또는 Azure Synapse Analytics의 사용자입니다. CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;

  • 암호가 있는 포함된 데이터베이스 사용자 (Azure Synapse Analytics에서 사용할 수 없습니다.) CREATE USER Mary WITH PASSWORD = '********';

Windows 그룹 로그인을 통해 연결하는 Windows 보안 주체 기반 사용자

  • 로그인이 없지만 Windows 그룹의 멤버 자격을 통해 데이터베이스 엔진에 연결할 수 있는 Windows 사용자 기반 사용자 CREATE USER [Contoso\test];

  • 로그인이 없지만 다른 Windows 그룹의 멤버 자격을 통해 데이터베이스 엔진에 연결할 수 있는 Windows 그룹 기반 사용자 CREATE USER [Contoso\test];

인증 할 수 없는 사용자 - 이러한 사용자는 SQL Server 또는 SQL Database에 로그인할 수 없습니다.

  • 로그인이 없는 사용자. 로그인할 수 없지만 사용 권한을 부여할 수 있습니다. CREATE USER CustomApp WITHOUT LOGIN;
  • 인증서 기반 사용자. 로그인할 수 없지만 사용 권한을 부여할 수 있으며 모듈에 서명할 수 있습니다. CREATE USER TestProcess FOR CERTIFICATE Contoso50;
  • 비대칭 키 기반 사용자. 로그인할 수 없지만 사용 권한을 부여할 수 있으며 모듈에 서명할 수 있습니다. CREATE User TestProcess FROM ASYMMETRIC KEY Contoso09;

Transact-SQL 구문 표기 규칙

Syntax

SQL Server, Azure SQL Database 및 Azure SQL Managed Instance에 대한 구문

-- Syntax Users based on logins in master
CREATE USER user_name
    [
        { FOR | FROM } LOGIN login_name
    ]
    [ WITH <limited_options_list> [ , ... ] ]
[ ; ]

-- Users that authenticate at the database
CREATE USER
    {
      windows_principal [ WITH <options_list> [ , ... ] ]

    | user_name WITH PASSWORD = 'password' [ , <options_list> [ , ... ]
    | Microsoft_Entra_principal FROM EXTERNAL PROVIDER [ WITH OBJECT_ID = 'objectid' ]
    }

 [ ; ]

-- Users based on Windows principals that connect through Windows group logins
CREATE USER
    {
          windows_principal [ { FOR | FROM } LOGIN windows_principal ]
        | user_name { FOR | FROM } LOGIN windows_principal
}
    [ WITH <limited_options_list> [ , ... ] ]
[ ; ]

-- Users that cannot authenticate
CREATE USER user_name
    {
         WITHOUT LOGIN [ WITH <limited_options_list> [ , ... ] ]
       | { FOR | FROM } CERTIFICATE cert_name
       | { FOR | FROM } ASYMMETRIC KEY asym_key_name
    }
 [ ; ]

<options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
    | SID = sid
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]

<limited_options_list> ::=
      DEFAULT_SCHEMA = schema_name ]
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]

-- SQL Database syntax when connected to a federation member
CREATE USER user_name
[;]

-- Syntax for users based on Microsoft Entra logins for Azure SQL Managed Instance
CREATE USER user_name
    [   { FOR | FROM } LOGIN login_name  ]
    | FROM EXTERNAL PROVIDER
    [ WITH <limited_options_list> [ , ... ] ]
[ ; ]

<limited_options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]

Azure Synapse Analytics 구문

CREATE USER user_name
    [ { { FOR | FROM } { LOGIN login_name }
      | WITHOUT LOGIN
    ]
    [ WITH DEFAULT_SCHEMA = schema_name ]
[;]

CREATE USER Microsoft_Entra_principal FROM EXTERNAL PROVIDER
    [ WITH DEFAULT_SCHEMA = schema_name ]
[;]

Microsoft Fabric 및 Azure SQL 데이터베이스에서 SQL 데이터베이스의 구문

CREATE USER
    {
    Microsoft_Entra_principal FROM EXTERNAL PROVIDER [ WITH <limited_options_list> [ , ... ] ]
    | Microsoft_Entra_principal WITH <options_list> [ , ... ]
    }
 [ ; ]

-- Users that cannot authenticate
CREATE USER user_name
    {    WITHOUT LOGIN [ WITH DEFAULT_SCHEMA = schema_name ]
       | { FOR | FROM } CERTIFICATE cert_name
       | { FOR | FROM } ASYMMETRIC KEY asym_key_name
    }
 [ ; ]

<limited_options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | OBJECT_ID = 'objectid'

<options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | SID = sid
    | TYPE = { X | E }

Arguments

user_name

이 데이터베이스 내에서 사용자를 식별하는 이름을 지정합니다. user_name은 sysname입니다. 최대 128자까지 지정할 수 있습니다. Windows 보안 주체 기반 사용자를 만드는 경우 다른 사용자 이름을 지정하지 않으면 Windows 보안 주체 이름이 사용자 이름이 됩니다.

LOGIN login_name

데이터베이스 사용자를 만들 로그인을 지정합니다. login_name은 서버에서 유효한 로그인이어야 합니다. Windows 보안 주체(사용자 또는 그룹), SQL Server 인증을 사용한 로그인 또는 Microsoft Entra 보안 주체(사용자, 그룹 또는 애플리케이션)를 사용한 로그인일 수 있습니다. 이 SQL Server 로그인이 데이터베이스에 들어가면 생성 중인 데이터베이스 사용자의 이름과 ID를 획득합니다. Windows 보안 주체에서 매핑된 로그인을 만들 때는 [<domainName>\<loginName>] 형식을 사용하세요. 예제는 구문 요약을 참조하세요.

만약 문장이 CREATE USER SQL 배치에서 유일한 문장이라면, Azure SQL Database는 WITH LOGIN 절을 지원합니다. 만약 문이 CREATE USER SQL 배치에서 유일한 문이 아니거나 동적 SQL에서 실행된다면, WITH LOGIN 절은 지원되지 않습니다.

DEFAULT_SCHEMA = schema_name

이 데이터베이스 사용자의 개체 이름을 확인할 때 서버에서 검색하는 첫 번째 스키마를 지정합니다.

'windows_principal'

데이터베이스 사용자를 만들 Windows 보안 주체를 지정합니다. windows_principal은 Windows 사용자 또는 Windows 그룹일 수 있습니다. windows_principal에 로그인이 없어도 사용자가 만들어집니다. SQL Server에 연결할 때 windows_principal에 로그인을 가지고 있지 않은 경우 Windows 보안 주체가 로그인이 있는 Windows 그룹의 멤버 자격을 통해 데이터베이스 엔진에서 인증하거나 연결 문자열에서 포함된 데이터베이스를 초기 카탈로그로 지정해야 합니다. Windows 보안 주체에서 사용자를 만들 때는 [<domainName>\<loginName>] 형식을 사용하세요. 예제는 구문 요약을 참조하세요. Active Directory 사용자에 기반한 사용자는 21자 미만의 이름으로 제한됩니다.

'Microsoft_Entra_principal'

적용 대상: SQL Server 2022 (16.x) 및 이후 버전, SQL 데이터베이스, SQL Managed Instance, Azure Synapse Analytics, Microsoft Fabric SQL 데이터베이스

데이터베이스 사용자를 만들 Microsoft Entra 보안 주체를 지정합니다. Microsoft_Entra_principal Microsoft Entra 사용자, Microsoft Entra 그룹 또는 Microsoft Entra 애플리케이션일 수 있습니다. (Microsoft Entra 사용자는 SQL Database에서 Windows 인증 로그인을 가질 수 없으며 데이터베이스 사용자만 사용할 수 있습니다.) 연결 문자열 포함된 데이터베이스를 초기 카탈로그로 지정해야 합니다.

Microsoft Entra 프린시펄의 경우, 구문은 CREATE USER 다음을 요구합니다:

  • Microsoft Entra 사용자용 Microsoft Entra 개체의 UserPrincipalName입니다.

    • CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;
    • CREATE USER [alice@fabrikam.onmicrosoft.com] FROM EXTERNAL PROVIDER;
  • Microsoft Entra 서버 보안 주체(로그인) 는 데이터베이스에서 master Microsoft Entra 로그인에 매핑되는 사용자를 만드는 방법을 소개합니다. 예를 들어 CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com];

  • 2048개 이상의 Microsoft Entra 보안 그룹의 구성원인 Microsoft Entra 사용자 및 애플리케이션(서비스 주체)은 Azure SQL Database, Azure SQL Managed Instance 또는 Azure Synapse의 데이터베이스에 로그인할 수 없습니다.

  • Microsoft Entra 그룹 및 Microsoft Entra Applications용 Microsoft Entra 개체의 DisplayName입니다. Nurses 보안 그룹이 있다면 다음을 사용합니다.

    • CREATE USER [Nurses] FROM EXTERNAL PROVIDER;

자세한 내용은 Microsoft Entra 인증을 사용하여 SQL Database에 연결을 참조하세요.

SQL Server의 Microsoft Entra 인증에 대한 자세한 내용은 자습서: Azure Arc에서 사용하도록 설정된 SQL Server에 대한 Microsoft Entra 인증 설정을 참조하세요.

비밀번호 = 'password'

적용 대상: SQL Server 2012 (11.x) 및 이후 버전, SQL 데이터베이스.

포함된 데이터베이스에서만 사용할 수 있습니다. 만들 사용자의 암호를 지정합니다.

SQL Server 2012(11.x)부터 SQL Server와 Azure SQL Database는 SHA-512 해시와 32비트 랜덤 및 고유 솔트를 결합하여 사용했습니다. 이 방법을 사용하면 공격자가 암호를 추론할 수 없도록 통계적으로 사용할 수 없습니다.

SQL Server 2025(17.x)에는 반복된 해시 알고리즘인 RFC2898 PBKDF( 암호 기반 키 파생 함수 )라고도 합니다. 이 알고리즘은 여전히 SHA-512를 사용하지만 암호를 여러 번 해시(100,000회 반복)하여 무차별 암호 대입 공격 속도가 크게 느려집니다. 이 변경은 진화하는 보안 위협에 대응하여 암호 보호를 강화하고 고객이 NIST SP 800-63b 지침을 준수하는 데 도움이 됩니다. 이 보안 향상 기능은 SQL 인증 로그인에 대한 로그인 시간을 약간 늘릴 수 있는 더 강력한 해시 알고리즘을 사용합니다. 일반적으로 연결 풀링이 있는 환경에서는 영향이 낮지만 풀링이 없는 시나리오 또는 로그인 대기 시간을 면밀히 모니터링하는 시나리오에서 더 두드러질 수 있습니다.

없이도 LOGIN

사용자가 기존 로그인에 매핑되지 않도록 지정합니다.

CERTIFICATE cert_name

적용 대상: SQL Server 2008 (10.0.x) 및 이후 버전, SQL 데이터베이스, Microsoft Fabric의 SQL 데이터베이스

데이터베이스 사용자를 만들 인증서를 지정합니다.

ASYMMETRIC KEY asym_key_name

적용 대상: SQL Server 2008 (10.0.x) 및 이후 버전, SQL 데이터베이스, Microsoft Fabric의 SQL 데이터베이스

데이터베이스 사용자를 만들 비대칭 키를 지정합니다.

DEFAULT_LANGUAGE = { NONE | <lcid> | <언어 이름> | <language salias> }

적용 대상: SQL Server 2012 (11.x) 및 이후 버전, SQL 데이터베이스

새 사용자의 기본 언어를 지정합니다. 사용자의 기본 언어를 지정한 후 데이터베이스의 기본 언어를 변경하면, 사용자의 기본 언어는 지정된 대로 유지됩니다. 기본 언어를 지정하지 않으면, 사용자는 데이터베이스의 기본 언어를 받게 됩니다. 사용자의 기본 언어를 지정하지 않고 나중에 데이터베이스의 기본 언어를 변경하면, 사용자의 기본 언어는 데이터베이스의 새로운 기본 언어로 바뀝니다.

Important

DEFAULT_LANGUAGE는 포함된 데이터베이스 사용자에 대해서만 사용됩니다.

SID = sid

적용 대상: SQL Server 2012 (11.x) 및 이후 버전, 그리고 Microsoft Fabric의 SQL 데이터베이스.

SQL Server 2012(11.x) 및 이후 버전에서는 포함된 데이터베이스 내 비밀번호(SQL Server 인증)를 가진 사용자에게만 적용됩니다. 새 데이터베이스 사용자의 SID를 지정합니다. 이 옵션을 선택하지 않으면 SQL Server가 자동으로 SID를 할당합니다. SID 매개 변수를 사용하여 여러 데이터베이스에 ID(SID)가 동일한 사용자를 만듭니다. 이 기능은 Always On 장애 조치 준비를 위해 여러 데이터베이스에 사용자를 생성할 때 유용합니다. 사용자의 sys.database_principalsSID를 결정하려면 .

Microsoft Fabric sid 의 SQL 데이터베이스에서 지정된 Microsoft Entra 보안 주체의 유효한 ID여야 합니다. 프린시펄이 사용자 또는 그룹이라면, ID는 사용자 또는 그룹의 Microsoft Entra 객체 ID여야 합니다. Microsoft Entra 프린시펄이 서비스 프린시펄(애플리케이션 또는 관리 아이덴티)이라면, ID는 애플리케이션 ID 또는 클라이언트 ID여야 합니다. 지정된 ID는 값이어야 binary(16) 합니다. 데이터베이스 엔진 Microsoft Entra에서 지정된 ID의 유효성을 검사하지 않습니다. 이 논수를 사용할 SID 때는 반드시 포함 TYPE해야 합니다.

TYPE = [ E | X ]

적용 대상: Microsoft Fabric 및 Azure SQL Database의 SQL 데이터베이스입니다.

Microsoft Entra 보안 주체의 유형을 지정합니다. E 는 보안 주체가 사용자 또는 서비스 주체(애플리케이션 또는 관리 ID)임을 나타냅니다. X 는 보안 주체가 그룹임을 나타냅니다.

ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ 온 | 꺼짐 ]

적용 대상: SQL Server 2016 (13.x) 및 이후 버전, SQL 데이터베이스.

대량 복사 작업에서 서버에 대한 암호화 메타데이터 검사를 표시하지 않습니다. 이를 통해 사용자는 데이터를 암호 해독하지 않고도 테이블이나 데이터베이스 사이에 암호화된 데이터를 대량 복사할 수 있습니다. 기본값은 OFF입니다.

Warning

이 옵션을 부적절하게 사용할 경우 데이터가 손상될 수 있습니다. 자세한 내용은 상시 암호화로 보호되는 중요한 데이터 마이그레이션을 참조하세요.

외부 제공자로부터

적용 대상: SQL Server 2022 (16.x) 및 이후 버전, SQL 데이터베이스, Azure SQL Managed Instance, Microsoft Fabric의 SQL 데이터베이스

보안 주체가 Microsoft Entra 인증용임을 지정합니다. SQL Server는 Microsoft Entra에서 제공된 보안 주체 이름의 유효성을 자동으로 검사합니다.

문장을 CREATE USER 발행하는 주체가 Microsoft Entra 사용자 주체라면, 주체나 주체의 그룹은 Microsoft Entra에서 디렉터리 리더 역할에 있어야 합니다.

SQL Database 및 Azure SQL Managed Instance에서 문을 발급하는 CREATE USER 보안 주체가 서비스 주체인 경우 데이터베이스 서버 또는 관리되는 인스턴스의 ID는 Microsoft Entra의 디렉터리 읽기 권한자 역할에 있어야 합니다.

Microsoft Fabric의 SQL 데이터베이스에서는 Microsoft Entra에서 서비스 주체가 발행되는 주체 CREATE USER 인지 사용할 FROM EXTERNAL PROVIDER 수 없습니다. 서비스 주체는 TYPE 및 SID 인수를 사용하여 Microsoft Entra 보안 주체에 대한 사용자를 만들어야 합니다.

OBJECT_ID = 'objectid'

적용 대상: SQL Server 2025 (17.x) 및 이후 버전, SQL 데이터베이스, Azure SQL Managed Instance, Microsoft Fabric의 SQL 데이터베이스

Microsoft Entra 개체 ID를 지정합니다. 만약 를 OBJECT_ID지정하면, user_name 원래 주요 표시명에 접미사가 붙은 사용자 정의 별칭이 될 수 있습니다. user_name 보기에서 sys.database_principals 고유한 이름이어야 하며 다른 sysname 모든 제한 사항을 준수해야 합니다. 옵션 사용 WITH OBJECT_ID 에 대한 자세한 내용은 Microsoft Entra 로그인 및 고유하지 않은 표시 이름을 가진 사용자를 참조하세요.

Note

SQL Server 2025(17.x)부터는 WITH OBJECT_ID Microsoft Entra 로그인과 고유한 표시명을 가진 사용자에게도 이 옵션이 지원됩니다.

서비스 주체 표시명이 중복이 아니라면 기본값 CREATE LOGIN 또는 CREATE USER 문장을 사용하세요. 확장은 WITH OBJECT_ID 특수하지 않은 서비스 주체와 함께 사용하기 위해 구현된 문제 해결 복구 항목입니다. 고유한 서비스 주체와 함께 사용하는 것은 권장되지 않습니다. WITH OBJECT_ID 접미사를 추가하지 않고 서비스 주체에 확장을 사용하면 성공적으로 실행되지만 로그인 또는 사용자가 만들어진 서비스 주체는 명확하지 않습니다. 서비스 주체를 고유하게 식별하기 위해 접미사를 사용하여 별칭을 만드는 것이 권장됩니다.

Remarks

만약 를 누락FOR LOGIN하면 새 데이터베이스 사용자는 같은 이름의 SQL Server 로그인에 매핑됩니다.

기본 스키마는 서버가 이 데이터베이스 사용자의 객체 이름을 해석할 때 가장 먼저 검색하는 스키마입니다. 달리 지정하지 않는 한 기본 스키마는 이 데이터베이스 사용자가 만든 개체의 소유자입니다.

사용자가 기본 스키마를 가지고 있다면, 서버는 그 기본 스키마를 사용합니다. 사용자가 기본 스키마가 없지만 기본 스키마를 가진 그룹의 멤버라면, 서버는 그 그룹의 기본 스키마를 사용합니다. 사용자가 기본 스키마가 없고 여러 그룹에 속한다면, 서버는 명시적으로 설정된 기본 스키마를 가진 Windows 그룹 principal_id 의 기본 스키마를 사용합니다. 기본 스키마 중 하나를 선호 스키마로 명시적으로 선택할 수는 없습니다. 서버가 사용자의 기본 스키마를 결정하지 못하면 그 스키마를 dbo 사용합니다.

가리키는 스키마를 만들기 전에 설정할 DEFAULT_SCHEMA 수 있습니다.

사용자를 생성할 때 인증서나 비대칭 키에 매핑할 수 있도록 지정할 DEFAULT_SCHEMA 수 없습니다.

서버는 사용자가 고정 서버 역할의 sysadmin 멤버라면 의 DEFAULT_SCHEMA 값을 무시합니다. 고정 서버 역할의 sysadmin 모든 구성원은 기본 스키마를 dbo가집니다.

이 조항은 WITHOUT LOGIN SQL 인증된 로그인에 매핑되지 않은 사용자를 생성합니다. guest와 같은 다른 데이터베이스에 연결할 수 있습니다. 로그인 없이도 이 사용자에게 권한을 할당할 수 있습니다. 보안 컨텍스트가 로그인 없이 사용자에게 변경되면, 원래 사용자는 로그인 없이 해당 사용자의 권한을 받게 됩니다. 예를 들어, D. 로그인 없이 사용자 생성 및 사용하기를 참조하세요.

Windows 보안 주체에 매핑되는 사용자만 백슬래시 문자( \ )를 포함할 수 있습니다.

게스트 사용자는 이미 모든 데이터베이스에 존재하기 때문에 게스트 CREATE USER 사용자를 생성할 수 없습니다. 게스트 사용자에게 권한을 부여 CONNECT 하여 활성화할 수 있습니다. 다음과 같습니다:

GRANT CONNECT TO guest; 
GO  

sys.database_principals 카탈로그 뷰에서 데이터베이스 사용자 정보를 확인할 수 있습니다.

구문 확장을 FROM EXTERNAL PROVIDER 사용하여 Azure SQL Database 및 Azure SQL Managed Instance에서 서버 수준 Microsoft Entra 로그인을 만듭니다. Microsoft Entra 로그인을 사용하면 데이터베이스 수준의 Microsoft Entra 프린시펄을 서버 수준의 Microsoft Entra 로그인에 매핑할 수 있습니다. Microsoft Entra 로그인에서 Microsoft Entra 사용자를 생성하려면 다음 문법을 사용하세요:

CREATE USER [Microsoft_Entra_principal] FROM LOGIN [Microsoft Entra login];

Azure SQL 데이터베이스에서 사용자를 생성할 때, login_name 해당 Microsoft Entra 로그인과 대응해야 합니다. 그렇지 않으면 이 조항을 사용하면 FROM EXTERNAL PROVIDER 데이터베이스에 master 로그인하지 않은 Microsoft Entra 사용자만 생성됩니다. 예를 들어, 다음 명령어는 포함된 사용자를 생성합니다:

CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;

구문 요약

로그인을 기반으로 하는 사용자 master

다음 목록에서는 로그인 기반 사용자에 대해 사용할 수 있는 구문을 보여 줍니다. 기본 스키마 옵션은 나열되지 않습니다.

  • CREATE USER [Domain1\WindowsUserTest]
  • CREATE USER [Domain1\WindowsUserTest] FOR LOGIN Domain1\WindowsUserTest
  • CREATE USER [Domain1\WindowsUserTest] FROM LOGIN Domain1\WindowsUserTest
  • CREATE USER [Domain1\WindowsGroupManagers]
  • CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]
  • CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]
  • CREATE USER SQLAUTHLOGIN
  • CREATE USER SQLAUTHLOGIN FOR LOGIN SQLAUTHLOGIN
  • CREATE USER SQLAUTHLOGIN FROM LOGIN SQLAUTHLOGIN

데이터베이스에서 인증하는 사용자

다음 목록에서는 포함된 데이터베이스에서만 사용할 수 있는 사용자에 대한 구문을 보여 줍니다. 생성된 사용자는 master 데이터베이스의 로그인에 연결되지 않습니다. 기본 스키마 및 언어 옵션은 나열되지 않습니다.

Important

이 구문은 사용자에게 데이터베이스에 대한 액세스 권한을 부여하며 데이터베이스 엔진에 대한 새로운 액세스 권한도 부여합니다.

  • CREATE USER [Domain1\WindowsUserTest]
  • CREATE USER [Domain1\WindowsGroupManagers]
  • CREATE USER Test WITH PASSWORD = '<strong password>'

시스템 데이터베이스에 로그인하지 않은 Windows 보안 주체를 기반으로 하는 master 사용자

다음 목록에서는 Windows 그룹을 통해 데이터베이스 엔진 액세스할 수 있지만 시스템 데이터베이스에 로그인이 없는 사용자에 master 대한 가능한 구문을 보여 줍니다. 이 구문은 모든 유형의 데이터베이스에서 사용할 수 있습니다. 기본 스키마 및 언어 옵션은 나열되지 않습니다.

이 구문은 로그인 master을 기반으로 하는 사용자와 유사하지만 이 사용자 범주에는 로그인 master이 없습니다. 사용자는 Windows 그룹 로그인을 통해 데이터베이스 엔진에 액세스할 수 있어야 합니다.

이 구문은 Windows 보안 주체를 기반으로 하는 포함된 데이터베이스 사용자와 유사하지만 이 범주의 사용자는 데이터베이스 엔진에 대한 새로운 액세스 권한을 부여받지 않습니다.

  • CREATE USER [Domain1\WindowsUserTest]
  • CREATE USER [Domain1\WindowsUserTest] FOR LOGIN Domain1\WindowsUserTest
  • CREATE USER [Domain1\WindowsUserTest] FROM LOGIN Domain1\WindowsUserTest
  • CREATE USER [Domain1\WindowsGroupManagers]
  • CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]
  • CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]

인증할 수 없는 사용자

다음 목록에서는 SQL Server에 로그인할 수 없는 사용자에 대한 가능한 구문을 보여줍니다.

  • CREATE USER RIGHTSHOLDER WITHOUT LOGIN
  • CREATE USER CERTUSER FOR CERTIFICATE SpecialCert
  • CREATE USER CERTUSER FROM CERTIFICATE SpecialCert
  • CREATE USER KEYUSER FOR ASYMMETRIC KEY SecureKey
  • CREATE USER KEYUSER FROM ASYMMETRIC KEY SecureKey

Security

사용자를 만들면 데이터베이스에 대한 액세스 권한이 부여되지만 데이터베이스 내부의 개체에 대한 액세스 권한은 자동으로 부여되지 않습니다. 사용자를 만든 후에는 대개 데이터베이스 개체에 액세스할 수 있는 권한이 있는 데이터베이스 역할에 사용자를 추가하거나 사용자에게 개체 사용 권한을 부여합니다. 권한 시스템 디자인에 대한 정보는 Getting Started with 데이터베이스 엔진 Permissions을(를) 참조하세요.

포함된 데이터베이스에 대한 특별한 고려사항

포함된 데이터베이스에 연결할 때 사용자에게 데이터베이스에 master 로그인이 없는 경우 연결 문자열 포함된 데이터베이스 이름을 초기 카탈로그로 포함해야 합니다. 암호가 있는 포함된 데이터베이스 사용자의 경우 언제나 초기 카탈로그 매개 변수를 지정해야 합니다.

포함된 데이터베이스에서 사용자를 만들면 데이터베이스 엔진 인스턴스로부터 데이터베이스를 분리하는 데 도움이 됩니다. 데이터베이스를 분리하면 다른 SQL Server 인스턴스로 데이터베이스를 쉽게 이동할 수 있습니다. 자세한 내용은 포함된 데이터베이스 및 포함된 데이터베이스 사용자 - 이식 가능한 데이터베이스 만들기를 참조하세요. 데이터베이스 사용자를 SQL 인증 로그인 기반 사용자에서 비밀번호가 포함된 데이터베이스 사용자로 변경하려면 sp_migrate_user_to_contained (Transact-SQL)를 참조하세요.

포함된 데이터베이스에서 사용자는 데이터베이스에 master 로그인할 필요가 없습니다. 데이터베이스 엔진 관리자는 데이터베이스 엔진 수준이 아니라 데이터베이스 수준에서 포함된 데이터베이스에 대한 액세스 권한을 부여할 수 있음을 이해해야 합니다. 자세한 내용은 Security Best Practices with Contained Databases를 참조하세요.

Azure SQL Database에 포함된 데이터베이스 사용자를 사용하는 경우, 서버 수준 방화벽 규칙 대신 데이터베이스 수준 방화벽 규칙을 사용하여 액세스를 구성합니다. 자세한 내용은 sp_set_database_firewall_rule(Azure SQL Database)을 참조하세요.

SQL Server 2022 (16.x), Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics 포함 데이터베이스 사용자에 대해, SSMS 는 다중 인증을 지원합니다. 자세한 내용은 Microsoft Entra 다단계 인증 사용을 참조하세요.

Permissions

데이터베이스에 대한 모든 USER 허가를 변경해야 합니다.

SQL Server 2022 및 이후 버전의 권한

데이터베이스에 대한 CREATE USER 권한이 필요합니다.

Examples

A. SQL Server 로그인을 기반으로 데이터베이스 사용자 생성

다음 예시는 먼저 데이터베이스 내에서 master 이름이 지정된 test SQL Server 로그인을 생성한 후, 해당 데이터베이스 사용자를 testAdventureWorks2025생성합니다.

--Connect to the master database
CREATE LOGIN test   
    WITH PASSWORD = '<strong password>';  

사용자 데이터베이스로 변경합니다. 예를 들어 SQL Server는 USE [AdventureWorks2022] 문을 사용합니다. Azure SQL Database에서는 해당 USE 문구가 제공되지 않습니다. 대신 의도한 데이터베이스에 직접 연결하고 나머지 코드 샘플을 실행하세요. 이 로그인 기반 예시는 로그인이나 로그인 기반 사용자를 지원하지 않는 Microsoft Fabric의 SQL 데이터베이스에는 적용되지 않습니다.

--Connect to a user database
CREATE USER test FOR LOGIN test;
GO   

B. 기본 스키마로 데이터베이스 사용자를 생성하세요

다음 예시는 먼저 당신이 제공하는 비밀번호로 서버 testlogin 로그인 이름을 만들고, 기본 스키마 Marketing로 대응하는 데이터베이스 사용자 testuser를 생성합니다.

--Connect to the master database
CREATE LOGIN testlogin
    WITH PASSWORD = '<strong password>';  

사용자 데이터베이스로 변경합니다. 예를 들어 SQL Server는 USE [AdventureWorks2022] 문을 사용합니다. Azure SQL Database와 Microsoft Fabric의 SQL 데이터베이스에서는 이 USE 문장이 제공되지 않습니다. 대신 의도한 데이터베이스에 직접 연결하고 나머지 코드 샘플을 실행하세요.

--Connect to a user database
CREATE USER testuser FOR LOGIN testlogin
    WITH DEFAULT_SCHEMA = Marketing;  

C. 인증서에서 데이터베이스 사용자 생성

다음 예에서는 test 인증서에서 데이터베이스 사용자 Contoso_Cert를 만듭니다. 자세한 내용은 (Transact-SQL)를 참조하세요CREATE CERTIFICATE.

USE AdventureWorks2022;  
CREATE CERTIFICATE Contoso_Cert  
    ENCRYPTION BY PASSWORD = '<strong password>'  
    WITH SUBJECT = 'Contoso Facility Supervisors',
    EXPIRY_DATE = '11/11/2011';  
GO  
CREATE USER test FOR CERTIFICATE Contoso_Cert;  
GO   

D. 로그인 없이 사용자 생성 및 사용

다음 예에서는 SQL Server 로그인에 매핑되지 않는 데이터베이스 사용자 CustomApp를 만듭니다. 그런 다음 adventure-works\test 사용자를 가장하도록 사용자에게 CustomApp 권한을 부여합니다.

USE AdventureWorks2022;  
CREATE USER CustomApp WITHOUT LOGIN ;  
GRANT IMPERSONATE ON USER::CustomApp TO [adventure-works\test] ;  
GO

CustomApp 자격 증명을 사용하기 위해 사용자 adventure-works\test이 다음 문을 실행합니다.

EXECUTE AS USER = 'CustomApp' ;  
GO  

adventure-works\test 자격 증명으로 다시 돌아가려면 사용자는 다음 문을 실행합니다.

REVERT ;  
GO  

E. 비밀번호가 포함된 데이터베이스 사용자 생성

다음 예에서는 암호가 있는 포함된 데이터베이스 사용자를 만듭니다. 이 예시는 포함된 데이터베이스에서만 실행할 수 있습니다.

이 예제는 SQL 데이터베이스에서 . 를 제거 DEFAULT_LANGUAGE하면 작동합니다.

USE AdventureWorks2022;  
GO  
CREATE USER test  
WITH PASSWORD='<password>'
    , DEFAULT_LANGUAGE=[Brazilian]  
    , DEFAULT_SCHEMA=[dbo]  
GO   

F. 도메인 로그인용 포함된 데이터베이스 사용자 생성

다음 예시는 도메인 이름 testContoso의 로그인에 대해 포함된 데이터베이스 사용자를 생성합니다. 이 예시는 포함된 데이터베이스에서만 실행할 수 있습니다.

USE AdventureWorks2022;
GO  
CREATE USER [Contoso\test] ;  
GO   

G. 특정 SID를 가진 포함된 데이터베이스 사용자 생성

다음 예시는 SQL Server 인증된 포함된 데이터베이스 사용자 TestUser를 생성합니다. 이 예시는 포함된 데이터베이스에서만 실행할 수 있습니다.

USE AdventureWorks2022;  
GO  
CREATE USER TestUser WITH PASSWORD = '<strong password>'  
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;

H. 암호화된 데이터를 복사할 사용자를 생성하세요

다음 예에서는 Always Encrypted 기능으로 보호되는 데이터를 암호화된 열이 있는 테이블 집합에서 암호화된 열이 있는 또 다른 테이블 집합으로(동일하거나 다른 데이터베이스에 있음) 복사할 수 있는 사용자를 만듭니다. 자세한 내용은 상시 암호화로 보호되는 중요한 데이터 마이그레이션을 참조하세요.

적용 대상: SQL Server 2016 (13.x) 및 이후 버전, SQL 데이터베이스.

CREATE USER [test]   
WITH   
      DEFAULT_SCHEMA = dbo  
    , ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON ;  

I. Azure SQL Database에서 Microsoft Entra 로그인 후 Microsoft Entra 사용자를 생성하고 Azure SQL Managed Instance

Microsoft Entra 로그인에서 Microsoft Entra 사용자를 만들려면 다음 구문을 사용합니다.

Microsoft Entra 로그인으로 Azure SQL Database 논리 서버 또는 SQL Managed Instance에 로그인하세요. 서버 관리자 로그인이나 SQL 데이터베이스에서 역할의 멤버 loginmanager 이거나 SQL Managed Instance에서 부여된 sysadmin 로그인을 사용하세요.

다음 T-SQL 스크립트는 로그인test@contoso.com에서 Microsoft Entra 사용자를 test@contoso.com만듭니다. 이 로그인은 예제에서 CREATE LOGIN 생성되었습니다.

CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com];
GO

Important

Microsoft Entra 로그인에서 a USER 를 생성할 때, user_name를 동일한 login_nameLOGIN로 지정합니다.

그룹인 Microsoft Entra 로그인에서 Microsoft Entra 사용자를 그룹으로 만드는 것이 지원됩니다.

CREATE USER [MS Entra group] FROM LOGIN [MS Entra group];

GO

그룹인 Microsoft Entra 로그인에서 Microsoft Entra 사용자를 만들 수도 있습니다.

CREATE USER [test@contoso.com] FROM LOGIN [MS Entra group];

GO

J. Microsoft Entra 보안 주체에서 포함된 데이터베이스 사용자 만들기

다음 구문은 연결된 로그인test@contoso.com이 없는 데이터베이스에 Microsoft Entra 사용자를 master만듭니다. 데이터베이스 엔진 지정된 사용자가 Microsoft Entra에 있는지 확인합니다.

CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;
GO

Microsoft Fabric의 SQL 데이터베이스에서는 Microsoft Entra에서 서비스 주체가 발행되는 주체 CREATE USER 인지 사용할 FROM EXTERNAL PROVIDER 수 없습니다.

K. 유효성 검사 없이 Microsoft Entra 보안 주체에서 포함된 데이터베이스 사용자 만들기

적용 대상: Microsoft Fabric의 SQL 데이터베이스 및 Azure SQL 데이터베이스

이 섹션의 예제에서는 Microsoft Entra에서 보안 주체 이름의 유효성을 검사하지 않고 Microsoft Entra 보안 주체에 대한 데이터베이스 사용자를 만듭니다.

다음 T-SQL 예제에서는 Microsoft test@contoso.comEntra 사용자에 대한 데이터베이스 사용자를 만듭니다. 새 사용자의 SID를 Microsoft Entra 사용자의 개체 ID로 바꿉 <unique identifier sid> 니다.

DECLARE @principal_name SYSNAME = 'test@contoso.com';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- user's object ID in Microsoft Entra

-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);

-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = E;'
EXEC (@cmd);

다음 예제에서는 이름이 Microsoft HRAppEntra 서비스 주체에 대한 데이터베이스 사용자를 만듭니다. 새 사용자의 SID를 Microsoft Entra의 서비스 주체의 클라이언트 ID로 바꿉 <unique identifier sid> 니다.

Note

Microsoft Entra 서비스 주체User-Assigned(관리 신원(UAMI) 또는 System-Assigned 관리 신원(SAMI)을 지정할 때는 객체 ID가 아닌 클라이언트 ID를 사용하세요.

DECLARE @principal_name SYSNAME = 'HRApp';
DECLARE @clientId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's client ID in Microsoft Entra

-- Convert the guid to the right type
DECLARE @castClientId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @clientId), 1);

-- Construct command: CREATE USER [@principal_name] WITH SID = @castClientId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castClientId + ', TYPE = E;'
EXEC (@cmd);

다음 예제에서는 이름이 Microsoft HREntra 그룹에 대한 데이터베이스 사용자를 만듭니다. 새 사용자의 SID를 그룹의 개체 ID로 바꿉 <unique identifier sid> 니다.

DECLARE @principal_name SYSNAME = 'HR';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's object ID in Microsoft Entra

-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);

-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = X;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = X;'
EXEC (@cmd);