CREATE USER(Transact-SQL)

현재 데이터베이스에 사용자를 추가합니다.

항목 링크 아이콘 Transact-SQL 구문 표기 규칙


CREATE USER user_name 
    [ { { FOR | FROM }
      { 
        LOGIN login_name 
        | CERTIFICATE cert_name 
        | ASYMMETRIC KEY asym_key_name
      } 
      | WITHOUT LOGIN
    ] 
    [ WITH DEFAULT_SCHEMA = schema_name ]

user_name

이 데이터베이스 내에서 사용자를 식별하는 이름을 지정합니다. user_namesysname입니다. 최대 128자까지 지정할 수 있습니다.

LOGIN login_name

데이터베이스 사용자를 만들 SQL Server 로그인을 지정합니다. login_name은 서버에서 유효한 로그인이어야 합니다. 이 SQL Server 로그인은 데이터베이스에 액세스할 때 만들어질 데이터베이스 사용자의 이름과 ID를 얻게 됩니다.

CERTIFICATE cert_name

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

ASYMMETRIC KEY asym_key_name

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

WITH DEFAULT_SCHEMA =schema_name

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

WITHOUT LOGIN

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

FOR LOGIN을 생략하면 새 데이터베이스 사용자가 같은 이름으로 SQL Server 로그인에 매핑됩니다.

DEFAULT_SCHEMA를 정의하지 않은 채로 두면 dbo가 데이터베이스 사용자의 기본 스키마로 사용됩니다. DEFAULT_SCHEMA는 현재 데이터베이스에 없는 스키마로 설정할 수 있으며 가리키는 스키마가 생성되기 전에 설정할 수 있습니다. Windows 그룹, 인증서 또는 비대칭 키에 매핑된 사용자를 생성할 때는 DEFAULT_SCHEMA를 지정할 수 없습니다.

중요 정보 중요

사용자가 sysadmin 고정 서버 역할의 멤버이면 DEFAULT_SCHEMA 값은 무시됩니다. sysadmin 고정 서버 역할의 모든 멤버는 기본 스키마가 dbo입니다.

WITHOUT LOGIN 절은 SQL Server 로그인에 매핑되지 않은 사용자를 만들며 guest와 같은 다른 데이터베이스에 연결할 수 있습니다.

SQL Server 로그인, 인증서 또는 비대칭 키에 매핑되는 사용자의 이름에는 백슬래시 문자(\)가 포함될 수 없습니다.

게스트 사용자가 이미 모든 데이터베이스 내에 있기 때문에 CREATE USER를 사용하여 게스트 사용자를 만들 수 없습니다. 다음과 같이 CONNECT 권한을 부여하여 게스트 사용자를 사용할 수 있습니다.

GRANT CONNECT TO guest;
GO

데이터베이스 사용자 정보는 sys.database_principals 카탈로그 뷰에 표시됩니다.

주의 사항주의

SQL Server 2005부터 스키마 동작이 변경되었습니다. 이에 따라 스키마가 데이터베이스 사용자와 같다고 가정하는 코드에서 올바른 결과가 반환되지 않을 수 있습니다. sysobjects를 비롯한 이전 카탈로그 뷰는 CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION 등의 DDL 문이 사용된 데이터베이스에서 사용하지 않아야 합니다. 이러한 데이터베이스에서는 새 카탈로그 뷰를 대신 사용해야 합니다. 새 카탈로그 뷰에서는 SQL Server 2005에 도입된 보안 주체와 스키마의 분리를 고려하고 있습니다. 카탈로그 뷰에 대한 자세한 내용은 카탈로그 뷰(Transact-SQL)를 참조하십시오.

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

1. 데이터베이스 사용자 만들기

다음 예에서는 암호를 사용하여 AbolrousHazem이라는 서버 로그인을 만든 다음 AdventureWorks에 해당 데이터베이스 사용자 AbolrousHazem을 만듭니다.

CREATE LOGIN AbolrousHazem 
    WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks;
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO 

2. 기본 스키마로 데이터베이스 사용자 만들기

다음 예에서는 암호를 사용하여 WanidaBenshoof라는 서버 로그인을 만든 다음 기본 스키마인 Marketing을 사용하여 해당 데이터베이스 사용자 Wanida를 만듭니다.

CREATE LOGIN WanidaBenshoof 
    WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks;
CREATE USER Wanida FOR LOGIN WanidaBenshoof 
    WITH DEFAULT_SCHEMA = Marketing;
GO

3. 인증서에서 데이터베이스 사용자 만들기

다음 예에서는 CarnationProduction50 인증서에서 데이터베이스 사용자 JinghaoLiu를 만듭니다.

USE AdventureWorks;
CREATE CERTIFICATE CarnationProduction50
    WITH SUBJECT = 'Carnation Production Facility Supervisors',
    EXPIRY_DATE = '11/11/2011';
GO
CREATE USER JinghaoLiu FOR CERTIFICATE CarnationProduction50;
GO 

D. 로그인 없이 사용자 만들기 및 사용

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

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

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

EXECUTE AS USER = 'CustomApp' ;
GO

adventure-works\tengiz0 자격 증명으로 다시 전환하기 위해 사용자가 다음 문을 실행합니다.

REVERT ;
GO

업데이트된 내용

예 4를 추가했습니다.

커뮤니티 추가 항목

추가
표시: