CREATE ASYMMETRIC KEY (Transact-SQL)

在資料庫中建立非對稱金鑰。

主題連結圖示Transact-SQL 語法慣例

語法

CREATE ASYMMETRIC KEY Asym_Key_Name 
   [ AUTHORIZATION database_principal_name ]
   {
      [ FROM <Asym_Key_Source> ]
      |
      WITH <key_option>
   [ ENCRYPTION BY <encrypting_mechanism> ]

<Asym_Key_Source>::=
   FILE ='path_to_strong-name_file'
   |
   EXECUTABLE FILE ='path_to_executable_file'
   |
   ASSEMBLY Assembly_Name
   |
   PROVIDER Provider_Name<key_option> ::=
   ALGORITHM = <algorithm>
      |
   PROVIDER_KEY_NAME ='key_name_in_provider'
      |
      CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

<algorithm> ::=
      { RSA_512 | RSA_1024 | RSA_2048 } 

<encrypting_mechanism> ::=
    PASSWORD = 'password'

引數

  • FROM Asym_Key_Source
    指定載入非對稱金鑰組時所在的來源。

  • AUTHORIZATION database_principal_name
    指定非對稱金鑰的擁有者。該擁有者不能是角色或群組。如果省略了這個選項,該擁有者便是目前的使用者。

  • FILE ='path_to_strong-name_file'
    指定載入金鑰組時所在的強式名稱檔案之路徑。

  • EXECUTABLE FILE ='path_to_executable_file'
    指定載入公開金鑰時所在的組件檔案。以 Windows API 的 MAX_PATH 限制為 260 個字元。

  • ASSEMBLY Assembly_Name
    指定載入公開金鑰時所在的組件之名稱。

  • ENCRYPTION BY <key_name_in_provider>
    指定如何加密金鑰。可以是憑證、密碼或非對稱金鑰。

  • KEY_NAME ='key_name_in_provider'
    從外部提供者指定金鑰名稱。如需有關外部金鑰管理的詳細資訊,請參閱<了解可延伸金鑰管理 (EKM)>。

  • CREATION_DISPOSITION = CREATE_NEW
    在可延伸金鑰管理裝置上建立新的金鑰。PROV_KEY_NAME 必須用於指定裝置上的金鑰名稱。如果金鑰已存在於裝置上,陳述式會失敗,並傳回錯誤。

  • CREATION_DISPOSITION = OPEN_EXISTING
    將 SQL Server 非對稱金鑰對應到現有的「可延伸金鑰管理」金鑰。PROV_KEY_NAME 必須用於指定裝置上的金鑰名稱。 如果未提供 CREATION_DISPOSITION = OPEN_EXISTING,預設值就是 CREATE_NEW。

  • PASSWORD = 'password'
    指定用來加密私密金鑰的密碼。如果這個子句不存在,此私密金鑰將會使用資料庫主要金鑰來加密。password 的上限為 128 個字元。password 必須符合執行 SQL Server 執行個體之電腦的 Windows 密碼原則需求。

備註

「非對稱金鑰」是資料庫層級的安全性實體。在它的預設格式中,這個實體同時包含公開金鑰和私密金鑰。如果執行時不使用 FROM 子句,CREATE ASYMMETRIC KEY 會產生新金鑰組。如果執行時使用 FROM 子句,CREATE ASYMMETRIC KEY 會從檔案匯入金鑰組,或從組件匯入公開金鑰。

依預設,私密金鑰由資料庫主要金鑰保護。如果尚未建立資料庫主要金鑰,則需要利用密碼保護私密金鑰。如果有資料庫主要金鑰,則密碼是選用的。

私密金鑰的長度可以是 512、1024 或 2048 位元。

權限

需要資料庫的 CREATE ASYMMETRIC KEY 權限。如果指定了 AUTHORIZATION 子句,則需要資料庫主體的 IMPERSONATE 權限或應用程式角色的 ALTER 權限。只有 Windows 登入、SQL Server 登入,以及應用程式角色可以擁有非對稱金鑰。群組和角色無法擁有非對稱金鑰。

範例

A. 建立非對稱金鑰

下列範例會利用 RSA_2048 演算法建立一個名稱為 PacificSales09 的非對稱金鑰,並利用密碼保護私密金鑰。

CREATE ASYMMETRIC KEY PacificSales09 
    WITH ALGORITHM = RSA_2048 
    ENCRYPTION BY PASSWORD = '<enterStrongPasswordHere>'; 
GO

B. 從檔案建立非對稱金鑰,並提供授權給使用者

下列範例會從儲存在檔案中的金鑰組建立非對稱金鑰 PacificSales19,然後授權使用者 Christina 使用該非對稱金鑰。

CREATE ASYMMETRIC KEY PacificSales19 AUTHORIZATION Christina 
    FROM FILE = 'c:\PacSales\Managers\ChristinaCerts.tmp'  
    ENCRYPTION BY PASSWORD = '<enterStrongPasswordHere>';
GO

C. 從 EKM 提供者建立非對稱金鑰

下列範例會從儲存在檔案中的金鑰組建立非對稱金鑰 EKM_askey1。然後會使用名稱為 EKMProvider1 的可延伸金鑰管理提供者,以及該提供者上,名稱為 key10_user1 的金鑰加密。

CREATE ASYMMETRIC KEY EKM_askey1 
    FROM PROVIDER EKM_Provider1
    WITH 
        ALGORITHM = RSA_512, 
        CREATION_DISPOSITION = CREATE_NEW
        , PROVIDER_KEY_NAME  = 'key10_user1' ;
GO