CREATE CERTIFICATE(Transact-SQL)
데이터베이스에 인증서를 추가합니다.
구문
CREATE CERTIFICATE certificate_name [ AUTHORIZATION user_name ]
{ FROM <existing_keys> | <generate_new_keys> }
[ ACTIVE FOR BEGIN_DIALOG = { ON | OFF } ]
<existing_keys> ::=
ASSEMBLY assembly_name
| {
[ EXECUTABLE ] FILE = 'path_to_file'
[ WITH PRIVATE KEY ( <private_key_options> ) ]
}
<generate_new_keys> ::=
[ ENCRYPTION BY PASSWORD = 'password']
WITH SUBJECT = 'certificate_subject_name'
[ , <date_options> [ ,...n ] ]
<private_key_options> ::=
FILE = 'path_to_private_key'
[ , DECRYPTION BY PASSWORD = 'password' ]
[ , ENCRYPTION BY PASSWORD = 'password' ]
<date_options> ::=
START_DATE = 'mm/dd/yyyy' | EXPIRY_DATE = 'mm/dd/yyyy'
인수
- certificate_name
데이터베이스에서 인증서를 식별하는 이름입니다.
- AUTHORIZATION user_name
이 인증서를 소유하게 될 사용자의 이름입니다.
- ASSEMBLY assembly_name
데이터베이스에 이미 로드된 서명된 어셈블리를 지정합니다.
- [ EXECUTABLE ] FILE ='path_to_file'
인증서를 포함하는 DER 인코딩 파일에 대해 파일 이름을 포함한 전체 경로를 지정합니다. EXECUTABLE 옵션을 사용한 경우 파일은 인증서로 서명된 DLL입니다. path_to_file은 로컬 경로 또는 네트워크 위치에 대한 UNC 경로일 수 있습니다. 파일은 SQL Server 서비스 계정의 보안 컨텍스트에서 액세스됩니다. 이 계정에는 필요한 파일 시스템 사용 권한이 있어야 합니다.
- WITH PRIVATE KEY
인증서의 개인 키가 SQL Server에 로드되도록 지정한 PRIVATE KEY 절입니다. 이 절은 인증서가 파일에서 생성되는 경우에만 유효합니다. 어셈블리의 개인 키를 로드하려면 ALTER CERTIFICATE를 사용합니다.
- FILE ='path_to_private_key'
개인 키에 대한 파일 이름을 포함한 전체 경로를 지정합니다. path_to_private_key는 로컬 경로 또는 네트워크 위치에 대한 UNC 경로일 수 있습니다. 파일은 SQL Server 서비스 계정의 보안 컨텍스트에서 액세스됩니다. 이 계정에는 필요한 파일 시스템 사용 권한이 있어야 합니다.
- DECRYPTION BY PASSWORD = 'key_password'
파일에서 검색한 개인 키의 암호를 해독하는 데 필요한 암호를 지정합니다. 개인 키가 Null 암호로 보호되는 경우 이 절은 선택 사항입니다. 암호 보호 없이 개인 키를 파일에 저장하는 것은 권장되지 않습니다. 암호가 필요하지만 지정된 암호가 없으면 문이 실패합니다.
- ENCRYPTION BY PASSWORD ='password'
개인 키를 암호화하는 데 사용되는 암호를 지정합니다. 암호로 인증서를 암호화하려는 경우에만 이 옵션을 사용합니다. 이 절을 생략하면 개인 키가 데이터베이스 마스터 키로 암호화됩니다. 암호는 암호 복잡성 정책을 따라야 합니다. 자세한 내용은 암호 정책을 참조하십시오.
- SUBJECT = 'certificate_subject_name'
제목이란 단어는 X.509 표준에 정의된 것과 같이 인증서의 메타데이터에 있는 필드를 나타냅니다. 제목은 최대 128자까지 지정할 수 있습니다. 128자를 초과하는 제목은 카탈로그에 저장될 때 잘리지만 인증서가 포함된 BLOB(Binary Large Object)에는 전체 제목 이름이 포함됩니다.
- START_DATE ='mm/dd/yyyy'
인증서가 유효하게 되는 날짜입니다. 지정하지 않으면 START_DATE가 현재 날짜와 같게 설정됩니다.
- EXPIRY_DATE ='mm/dd/yyyy'
인증서가 만료되는 날짜입니다. 지정하지 않으면 EXPIRY_DATE가 START_DATE의 일년 후 날짜로 설정됩니다.
- ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
Service Broker 대화 기능의 시작자가 인증서를 사용할 수 있게 합니다. 기본값은 ON입니다.
주의
인증서는 X.509 표준을 따르고 X.509 V1 필드를 지원하는 데이터베이스 수준의 보안 개체입니다. CREATE CERTIFICATE는 파일이나 어셈블리로부터 인증서를 로드할 수 있습니다. 이 문은 또한 키 쌍을 생성하고 자체 서명된 인증서를 만들 수 있습니다.
SQL Server에서 생성되는 개인 키의 길이는 1024비트입니다. 외부 원본으로부터 가져온 개인 키의 최소 길이는 384비트이고 최대 길이는 3,456비트입니다. 가져온 개인 키의 길이는 64비트의 정수 배수여야 합니다.
개인 키는 certificate_name으로 지정한 공개 키와 일치해야 합니다.
컨테이너로부터 인증서를 만들 때 개인 키 로드는 선택 사항입니다. 하지만 SQL Server가 자체 서명된 인증서를 생성할 때 항상 개인 키가 생성됩니다. 기본적으로 개인 키는 데이터베이스 마스터 키를 사용하여 암호화됩니다. 데이터베이스 마스터 키가 없고 지정된 암호가 없으면 문이 실패합니다.
개인 키가 데이터베이스 마스터 키로 암호화되는 경우 ENCRYPTION BY PASSWORD 옵션이 필요하지 않습니다. 이 옵션은 개인 키가 암호로 암호화되는 경우에만 사용합니다. 지정된 암호가 없으면 인증서의 개인 키가 데이터베이스 마스터 키를 사용하여 암호화됩니다. 이 절을 생략하면 데이터베이스 마스터 키를 열 수 없는 경우 오류가 발생합니다.
데이터베이스 마스터 키를 사용하여 개인 키를 암호화한 경우에는 해독 암호를 지정할 필요가 없습니다.
[!참고] 암호화 및 서명에 대한 기본 제공 함수는 인증서의 만료 날짜를 검사하지 않습니다. 이러한 함수의 사용자는 인증서 만료에 대한 검사 시기를 결정해야 합니다.
START_DATE 및 EXPIRY_DATE 인수를 사용하면 이러한 날짜의 시간을 지정할 수 없습니다. 그러나 SQL Server에서 제공하는 날짜 및 시간 함수를 사용하여 인증서 시작 날짜와 만료 날짜에 특정 시간을 추가할 수 있습니다. 자세한 내용은 다음 항목을 참조하십시오.
사용 권한
데이터베이스에 대한 CREATE CERTIFICATE 권한이 필요합니다.
예
1. 자체 서명된 인증서 만들기
다음 예에서는 Shipping04
라는 인증서를 만듭니다. 이 인증서의 개인 키는 암호를 사용하여 보호됩니다.
USE AdventureWorks;
CREATE CERTIFICATE Shipping04
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Sammamish Shipping Records',
EXPIRY_DATE = '10/31/2009';
GO
2. 파일로부터 인증서 만들기
다음 예에서는 데이터베이스에서 인증서를 만들고 파일로부터 키 쌍을 로드합니다.
USE AdventureWorks;
CREATE CERTIFICATE Shipping11
FROM FILE = 'c:\Shipping\Certs\Shipping11.cer'
WITH PRIVATE KEY (FILE = 'c:\Shipping\Certs\Shipping11.pvk',
DECRYPTION BY PASSWORD = 'sldkflk34et6gs%53#v00');
GO
3. 서명된 실행 파일로부터 인증서 만들기
USE AdventureWorks;
CREATE CERTIFICATE Shipping19
FROM EXECUTABLE FILE = 'c:\Shipping\Certs\Shipping19.dll';
GO
또는 dll
파일로부터 어셈블리를 만든 다음 어셈블리로부터 인증서를 만들 수 있습니다.
USE AdventureWorks;
CREATE ASSEMBLY Shipping19
FROM ' c:\Shipping\Certs\Shipping19.dll'
WITH PERMISSION_SET = SAFE;
GO
CREATE CERTIFICATE Shipping19 FROM ASSEMBLY Shipping19;
GO
참고 항목
참조
ALTER CERTIFICATE(Transact-SQL)
DROP CERTIFICATE(Transact-SQL)
BACKUP CERTIFICATE(Transact-SQL)
EVENTDATA(Transact-SQL)