CREATE CERTIFICATE (Transact-SQL)

將憑證加入至資料庫中。

主題連結圖示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 ='datetime' | EXPIRY_DATE ='datetime'

引數

  • 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 中。只有在從檔案建立憑證的情況下,這個子句才有效。若要載入組件的私密金鑰,請使用 ALTER CERTIFICATE

  • FILE ='path_to_private_key'
    指定私密金鑰的完整路徑,包括檔案名稱。path_to_private_key 可以是本機路徑或通往網路位置的 UNC 路徑。這個檔案將在 SQL Server 服務帳戶的安全性內容中被存取。這個帳戶必須有必要的檔案系統權限。

  • DECRYPTION BY PASSWORD = 'key_password'
    指定解密從檔案擷取的私密金鑰時所需的密碼。如果私密金鑰由 Null 密碼保護,則這個子句是選擇性的。建議您不要將私密金鑰儲存至一個沒有密碼保護的檔案。如果需要密碼但沒有指定密碼,陳述式會失敗。

  • ENCRYPTION BY PASSWORD ='password'
    指定要用來加密私密金鑰的密碼。請只在您要利用密碼來加密憑證時才使用這個選項。如果省略這個子句,此私密金鑰將會使用資料庫主要金鑰來加密。password 必須符合執行 SQL Server 執行個體之電腦的 Windows 密碼原則需求。如需詳細資訊,請參閱<密碼原則>。

  • SUBJECT = 'certificate_subject_name'
    「主旨」(Subject) 一詞是指依照 X.509 標準定義之憑證中繼資料中的欄位。主旨長度最多可達 128 個字元。超過 128 個字元的主旨在儲存至目錄時會被截斷,但包含憑證的二進位大型物件 (BLOB) 會保留完整的主旨名稱。

  • START_DATE ='datetime'
    這是憑證生效的日期。若未指定,會將 START_DATE 設為等於目前的日期。START_DATE 為 UTC 時間格式,可以用任何可轉換成日期和時間的格式指定。

  • EXPIRY_DATE ='datetime'
    這是憑證到期的日期。若未指定,會將 EXPIRY_DATE 設為 START_DATE 之後一年的日期。EXPIRY_DATE 為 UTC 時間,可以用任何可轉換成日期和時間的格式指定。SQL Server Service Broker 會檢查到期日,不過當憑證用於加密時,不會強制執行到期。

  • 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 選項。請只在要利用密碼加密私密金鑰時,才使用這個選項。如果未指定密碼,則會利用資料庫主要金鑰加密憑證的私密金鑰。如果無法開啟資料庫的主要金鑰,則省略這個子句會造成錯誤。

如果是利用資料庫主要金鑰加密私密金鑰,就不必指定解密密碼。

[!附註]

用於加密及簽署的內建函數不會檢查憑證的到期日期。這些函數的使用者必須決定何時檢查憑證到期日期。

權限

需要資料庫的 CREATE CERTIFICATE 權限。只有 Windows 登入、SQL Server 登入,以及應用程式角色可以擁有憑證。群組和角色無法擁有憑證。

範例

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