다음을 통해 공유


CREATE CREDENTIAL(Transact-SQL)

적용 대상: SQL Server Azure SQL Managed Instance

서버 수준 자격 증명을 만듭니다. 자격 증명은 SQL Server 외부의 리소스에 연결하는 데 필요한 인증 정보가 포함된 레코드입니다. 대부분의 자격 증명에는 Windows 사용자 및 암호가 들어 있습니다. 예를 들어 일부 위치에 데이터베이스 백업을 저장 하면 해당 위치에 액세스할 수 있는 특별 자격 증명을 제공하기 위해 SQL Server를 요청할 수 있습니다. 자세한 내용은 자격 증명(데이터베이스 엔진)을 참조하세요.

참고

데이터베이스 수준의 자격 증명을 만들려면 CREATE DATABASE SCOPED CREDENTIAL(Transact-SQL)을 사용합니다. 서버의 여러 데이터베이스에 CREATE CREDENTIAL 대해 동일한 자격 증명을 사용해야 하는 경우 서버 수준 자격 증명을 만듭니다.

  • 데이터베이스의 이식성을 높일 수 있도록 데이터베이스 범위 자격 증명 CREATE DATABASE SCOPED CREDENTIAL 을 만듭니다. 데이터베이스를 새 서버로 이동할 때 데이터베이스 범위 자격 증명도 함께 이동됩니다.
  • SQL Server에서 데이터베이스 범위 자격 증명을 사용합니다.
  • PolyBase 및 Azure SQL Managed Instance 데이터 가상화 기능에서 데이터베이스 범위 자격 증명을 사용합니다.

Transact-SQL 구문 표기 규칙

구문

CREATE CREDENTIAL credential_name
WITH IDENTITY = 'identity_name'
    [ , SECRET = 'secret' ]
        [ FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name ]

인수

credential_name

만들 자격 증명의 이름을 지정합니다. credential_name은 번호(#) 기호로 시작할 수 없습니다. 시스템 자격 증명은 ##으로 시작합니다.

중요

SAS(공유 액세스 서명)를 사용할 때 이 이름은 컨테이너 경로와 일치해야 하며 https로 시작해야 하고 슬래시를 포함하지 말아야 합니다. 예제 D를 참조하세요.

Azure Blob Storage 또는 S3 호환 플랫폼과 같은 외부 데이터 플랫폼을 사용하여 백업/복원에 사용되는 경우 다음 표에서는 일반적인 경로를 제공합니다.

외부 데이터 원본 위치 경로 예시
Azure Blob Storage(V2) https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername> 예제 D.
S3 호환 개체 스토리지 - S3 호환 스토리지: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.<region>.amazonaws.com[:port]/<folder>
또는 s3://s3.<region>.amazonaws.com[:port]/<bucket_name>/<folder>
예제 F.

IDENTITY ='identity_name'

서버 외부에 연결할 때 사용할 계정의 이름을 지정합니다. Azure Key Vault에 액세스하기 위해 자격 증명을 사용하는 경우, IDENTITY가 Key Vault의 이름입니다. 아래의 예 3을 참조하세요. 자격 증명이 SAS(공유 액세스 서명)를 사용하는 경우 IDENTITYSAS입니다. 아래의 예 4를 참조하십시오.

중요

Azure SQL Database는 Azure Key Vault와 공유 액세스 서명 ID만 지원합니다. Windows 사용자 ID는 지원되지 않습니다.

SECRET ='secret'

나가는 인증에 필요한 암호를 지정합니다.

자격 증명을 사용하여 Azure Key Vault에 액세스하는 경우 SECRET 인수는 서비스 주체의 <클라이언트 ID>(하이픈 없음) 및 비밀> 형식으로 지정되어야 하며<, 둘 사이에 공백 없이 함께 전달되어야 합니다. 아래의 예 3을 참조하세요. 자격 증명이 SAS(공유 액세스 서명)를 사용하는 경우 IDENTITY는 SAS 토큰입니다. 아래의 예 4를 참조하십시오. Azure 컨테이너에 저장된 액세스 정책 및 공유 액세스 서명 만들기에 대한 자세한 내용은 1단원: Azure 컨테이너에 저장된 액세스 정책 및 공유 액세스 서명 만들기를 참조하세요.

암호화 공급자 cryptographic_provider_name

EKM(Enterprise Key Management) 공급자의 이름을 지정합니다. 키 관리에 대한 자세한 내용은 확장 가능 키 관리(EKM)를 참조하세요.

설명

IDENTITY가 Windows 사용자인 경우 암호는 해당 사용자의 암호일 수 있습니다. 암호는 서비스 마스터 키를 사용하여 암호화됩니다. 서비스 마스터 키가 다시 생성되면 암호가 새 서비스 마스터 키를 사용하여 다시 암호화됩니다.

자격 증명을 만든 다음에는 CREATE LOGIN 또는 ALTER LOGIN을 사용하여 SQL Server 로그인에 매핑할 수 있습니다. SQL Server 로그인은 단 하나의 자격 증명에만 매핑될 수 있지만 단일 자격 증명은 여러 SQL Server 로그인에 매핑될 수 있습니다. 자세한 내용은 자격 증명(데이터베이스 엔진)을 참조하세요. 서버 수준 자격 증명은 데이터베이스 사용자가 아닌 로그인에만 매핑할 수 있습니다.

자격 증명에 대한 정보는 sys.credentials 카탈로그 뷰에 표시됩니다.

공급자에 대해 매핑된 로그인 자격 증명이 없으면 SQL Server 서비스 계정에 매핑된 자격 증명이 사용됩니다.

자격 증명이 고유한 공급자에 대해 사용되는 경우 로그인에 여러 개의 매핑된 자격 증명이 있을 수 있습니다. 로그인별로 각 공급자에 하나의 매핑된 자격 증명만 있어야 합니다. 동일한 자격 증명이 다른 로그인에 매핑될 수 있습니다.

사용 권한

ALTER ANY CREDENTIAL 권한이 필요합니다.

예제

A. Windows ID에 대한 자격 증명 만들기

다음 예에서는 AlterEgo라는 자격 증명을 만듭니다. 이 자격 증명에는 Windows 사용자 Mary5 및 암호가 들어 있습니다.

CREATE CREDENTIAL AlterEgo WITH IDENTITY = 'Mary5',
    SECRET = '<EnterStrongPasswordHere>';
GO

B. EKM에 대한 자격 증명 만들기

다음 예에서는 이전에 EKM 모듈에서 EKM의 관리 도구의 기본 계정 유형 및 암호를 사용하여 만든 User1OnEKM이라는 계정을 사용합니다. 서버의 sysadmin 계정은 EKM 계정에 연결하는 데 사용되는 자격 증명을 만들고 이를 User1 SQL Server 계정에 할당합니다.

CREATE CREDENTIAL CredentialForEKM
    WITH IDENTITY='User1OnEKM', SECRET='<EnterStrongPasswordHere>'
    FOR CRYPTOGRAPHIC PROVIDER MyEKMProvider;
GO

/* Modify the login to assign the cryptographic provider credential */
ALTER LOGIN User1
ADD CREDENTIAL CredentialForEKM;

C. Azure Key Vault를 사용하는 EKM에 대한 자격 증명 만들기

다음 예제에서는 Microsoft Azure Key Vault용 SQL Server 커넥터를 사용하여 Azure Key Vault에 액세스할 때 사용할 데이터베이스 엔진용 SQL Server 자격 증명을 만듭니다. SQL Server 커넥터를 사용하는 전체 예제는 Azure Key Vault를 사용한 확장 가능 키 관리(SQL Server)를 참조하세요.

중요

CREATE CREDENTIALIDENTITY 인수에는 키 자격 증명 모음 이름이 필요합니다. CREATE CREDENTIALSECRET 인수에는 사이에 공백 없이 함께 전달할 <Client ID>(하이픈 없이) 및 <Secret>이 필요합니다.

다음 예제 에서는 클라이언트 ID (11111111-2222-3333-4444-555555555555)가 하이픈을 제거하고 문자열 11111111222233334444555555555555 로 입력되고 비밀 이 문자열 SECRET_DBEngine로 표시됩니다.

USE master;
CREATE CREDENTIAL Azure_EKM_TDE_cred
    WITH IDENTITY = 'ContosoKeyVault',
    SECRET = '11111111222233334444555555555555SECRET_DBEngine'
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;

다음 에제는 Client IDSecret 문자열에 대한 변수를 사용하여 동일한 자격 증명을 만든 후, SECRET 인수를 형성하기 위해 함께 연결합니다. REPLACE 함수는 클라이언트 ID로부터 하이픈을 제거하기 위해 사용됩니다.

DECLARE @AuthClientId uniqueidentifier = '11111111-AAAA-BBBB-2222-CCCCCCCCCCCC';
DECLARE @AuthClientSecret varchar(200) = 'SECRET_DBEngine';
DECLARE @pwd varchar(max) = REPLACE(CONVERT(varchar(36), @AuthClientId) , '-', '') + @AuthClientSecret;

EXEC ('CREATE CREDENTIAL Azure_EKM_TDE_cred
    WITH IDENTITY = ''ContosoKeyVault'', SECRET = ''' + @PWD + '''
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;');

D. SAS 토큰을 사용하여 자격 증명 만들기

적용 대상: SQL Server 2014(12.x)~현재 버전 및 Azure SQL Managed Instance.

다음 예제에서는 SAS 토큰을 사용하여 공유 액세스 서명 자격 증명을 만듭니다. Azure 컨테이너에서 저장된 액세스 정책 및 공유 액세스 서명을 만든 다음 공유 액세스 서명을 사용하여 자격 증명을 만드는 방법에 대한 자습서는 자습서: SQL Server 데이터베이스와 함께 Microsoft Azure Blob Storage를 사용합니다.

Important

CREDENTIAL NAME 인수는 이름이 컨테이너 경로와 일치하고 https로 시작하고 후행 슬래시를 포함하지 않을 것을 요구합니다. IDENTITY 인수는 이름, 공유 액세스 서명을 요구합니다. SECRET 인수는 공유 액세스 서명 토큰을 요구합니다.

공유 액세스 서명 비밀 앞에 ? 이 없어야 합니다.

USE master
CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] -- this name must match the container path, start with https and must not contain a trailing forward slash.
    WITH IDENTITY='SHARED ACCESS SIGNATURE' -- this is a mandatory string and do not change it.
    , SECRET = 'sharedaccesssignature' -- this is the shared access signature token
GO

E. 관리 ID에 대한 자격 증명 만들기

다음 예제에서는 Azure SQL 또는 Azure Synapse 서비스의 관리 ID를 나타내는 자격 증명을 만듭니다. 이 경우 암호 및 비밀이 적용되지 않습니다.

CREATE CREDENTIAL ServiceIdentity WITH IDENTITY = 'Managed Identity';
GO

F. S3 호환 스토리지에 백업/복원을 위한 자격 증명 만들기

적용 대상: SQL Server 2022(16.x) 이상 버전

개방형 S3 호환 표준은 스토리지 경로 및 스토리지 플랫폼에 따라 다를 수 있는 세부 정보를 제공합니다. 자세한 내용은 S3 호환 개체 스토리지의 URL에 SQL Server 백업을 참조하세요.

대부분의 S3 호환 스토리지의 경우 이 예제에서는 서버 수준 자격 증명을 BACKUP TO URL만들고 .

USE [master];
CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]
WITH
        IDENTITY    = 'S3 Access Key',
        SECRET      = '<AccessKeyID>:<SecretKeyID>';
GO

BACKUP DATABASE [SQLTestDB]
TO      URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH    FORMAT /* overwrite any existing backup sets */
,       STATS = 10
,       COMPRESSION;

그러나 AWS S3은 두 가지 서로 다른 URL 표준을 지원합니다.

  • S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER>(기본값)
  • S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

AWS S3에 대한 자격 증명을 성공적으로 만드는 방법에는 여러 가지가 있습니다.

  • 자격 증명 이름에 버킷 이름 및 경로 및 지역을 제공합니다.

    -- S3 bucket name: datavirtualizationsample
    -- S3 bucket region: us-west-2
    -- S3 bucket folder: backup
    
    CREATE CREDENTIAL [s3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup]
    WITH    
            IDENTITY    = 'S3 Access Key'
    ,       SECRET      = 'accesskey:secretkey';
    GO
    
    BACKUP DATABASE [AdventureWorks2022]
    TO URL  = 's3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup/AdventureWorks2022.bak'
    WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
    GO
    

    또는,

    CREATE CREDENTIAL [s3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup]
    WITH    
            IDENTITY    = 'S3 Access Key'
    ,       SECRET      = 'accesskey:secretkey';
    GO
    
    BACKUP DATABASE [AdventureWorks2022]
    TO URL  = 's3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup/AdventureWorks2022.bak'
    WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
    GO
    
  • 또는 자격 증명 이름에 버킷 이름 및 경로를 제공하지만 각 BACKUP/RESTORE 명령 내에서 지역을 매개 변수화합니다. 에 S3 특정 지역 문자열을 BACKUP_OPTIONS 사용합니다. RESTORE_OPTIONS예를 들면 다음과 같습니다 '{"s3": {"region":"us-west-2"}}'.

    -- S3 bucket name: datavirtualizationsample
    -- S3 bucket region: us-west-2
    -- S3 bucket folder: backup
    
    CREATE CREDENTIAL   [s3://datavirtualizationsample.s3.amazonaws.com/backup]
    WITH    
            IDENTITY    = 'S3 Access Key'
    ,       SECRET      = 'accesskey:secretkey';
    GO
    
    BACKUP DATABASE [AdventureWorks2022]
    TO URL  = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
    WITH
      BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}' -- REGION AS PARAMETER)
    , COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
    GO
    
    RESTORE DATABASE AdventureWorks2022_1 
    FROM URL = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
    WITH 
      MOVE 'AdventureWorks2022' 
      TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.mdf'
    , MOVE 'AdventureWorks2022_log' 
      TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.ldf'
    , STATS = 10, RECOVERY
    , REPLACE, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'; -- REGION AS PARAMETER)
    GO