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
這是 PRIVATE KEY 子句,它指定憑證的私密金鑰必須載入 SQL Server 中。只有在從檔案建立憑證的情況下,這個子句才有效。若要載入組件的私密金鑰,請使用 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'
「主旨」(Subject) 一詞是指依照 X.509 標準定義之憑證中繼資料中的欄位。主旨的長度最多可達 128 個字元。長度超過 128 個字元的主旨在儲存至目錄時會被截斷,但包含憑證的二進位大型物件 (BLOB) 會保留完整的主旨名稱。
- 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 權限。
範例
A. 建立自簽憑證
下列範例會建立一個稱為 Shipping04
的憑證。這個憑證的私密金鑰是利用密碼來保護的。
USE AdventureWorks;
CREATE CERTIFICATE Shipping04
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Sammamish Shipping Records',
EXPIRY_DATE = '10/31/2009';
GO
B. 從檔案建立憑證
下列範例在資料庫中建立憑證,並從檔案載入金鑰組。
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
C. 從簽署的可執行檔建立憑證
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)