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> ) ]
}
| {
BINARY = asn_encoded_certificate
[ 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' ]
}
|
{
BINARY = private_key_bits
[ , 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 服務帳戶的安全性內容中被存取。 這個帳戶必須有必要的檔案系統權限。[!附註]
自主資料庫無法使用這個選項。
asn_encoded_certificate
指定為二進位常數的 ASN 編碼憑證位元。BINARY =private_key_bits
指定為二進位常數的私密金鑰位元。 這些位元可以是加密形式。 如果加密的話,使用者必須提供解密密碼。 不會針對這個密碼執行密碼原則檢查。 私密金鑰位元應該採用 PVK 檔案格式。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 個位元,其最大長度為 4,096 個位元。 匯入的私密金鑰,其長度必須為 64 個位元的整數倍。 用於 TDE 的憑證僅限於 3456 位元的私密金鑰大小。
私密金鑰必須對應至 certificate_name 所指定的公開金鑰。
當您從容器建立憑證時,載入私密金鑰是選擇性的。 但是當 SQL Server 產生自簽憑證時,永遠會建立私密金鑰。 依預設,私密金鑰是利用資料庫主要金鑰來加密的。 如果資料庫主要金鑰不存在,且沒有指定密碼,陳述式會失敗。
若要利用資料庫主要金鑰加密私密金鑰,則不需要 ENCRYPTION BY PASSWORD 選項。 請只在要利用密碼加密私密金鑰時,才使用這個選項。 如果未指定密碼,則會利用資料庫主要金鑰加密憑證的私密金鑰。 如果無法開啟資料庫的主要金鑰,則省略這個子句會造成錯誤。
如果是利用資料庫主要金鑰加密私密金鑰,就不必指定解密密碼。
[!附註]
用於加密及簽署的內建函數不會檢查憑證的到期日期。 這些函數的使用者必須決定何時檢查憑證到期日期。
可以使用 CERTENCODED (Transact-SQL) 和 CERTPRIVATEKEY (Transact-SQL) 函數建立憑證的二進位描述。 如需使用 CERTPRIVATEKEY 和 CERTENCODED 將憑證複製到其他資料庫的範例,請參閱<CERTENCODED (Transact-SQL)>主題中的範例 B。
權限
需要資料庫的 CREATE CERTIFICATE 權限。 只有 Windows 登入、SQL Server 登入,以及應用程式角色可以擁有憑證。 群組和角色無法擁有憑證。
範例
A.建立自我簽署憑證
下列範例會建立一個稱為 Shipping04 的憑證。 這個憑證的私密金鑰是利用密碼來保護的。
USE AdventureWorks2012;
CREATE CERTIFICATE Shipping04
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Sammamish Shipping Records',
EXPIRY_DATE = '20121031';
GO
B.從檔案建立憑證
下列範例在資料庫中建立憑證,並從檔案載入金鑰組。
USE AdventureWorks2012;
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 AdventureWorks2012;
CREATE CERTIFICATE Shipping19
FROM EXECUTABLE FILE = 'c:\Shipping\Certs\Shipping19.dll';
GO
另外,您也可以從 dll 檔建立組件,然後從該組件建立憑證。
USE AdventureWorks2012;
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)