CREATE SYMMETRIC KEY (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse Analytics

在 SQL Server 中產生對稱金鑰及指定其屬性。

此功能與使用資料層應用程式架構 (DACFx) 的資料庫匯出不相容。 您必須在匯出之前先卸除所有非對稱金鑰。

Transact-SQL 語法慣例

注意

Azure Synapse Analytics 的無伺服器 SQL 集區不支援此語法。

Syntax

CREATE SYMMETRIC KEY key_name
    [ AUTHORIZATION owner_name ]
    [ FROM PROVIDER provider_name ]
    WITH
        [
            <key_options> [ , ... n ]
            | ENCRYPTION BY <encrypting_mechanism> [ , ... n ]
        ]

<key_options> ::=
    KEY_SOURCE = 'pass_phrase'
    | ALGORITHM = <algorithm>
    | IDENTITY_VALUE = 'identity_phrase'
    | PROVIDER_KEY_NAME = 'key_name_in_provider'
    | CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

<algorithm> ::=
    DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128
    | DESX | AES_128 | AES_192 | AES_256

<encrypting_mechanism> ::=
    CERTIFICATE certificate_name
    | PASSWORD = 'password'
    | SYMMETRIC KEY symmetric_key_name
    | ASYMMETRIC KEY asym_key_name

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

key_name

依據資料庫中已知之對稱金鑰指定唯一的名稱。 這是必要參數。 當key_name以一個數位 (#) 符號開頭時,會指定暫存密鑰。 例如: #temporaryKey900007 。 您無法建立對稱金鑰,其名稱開頭超過一個 #。 您無法使用 EKM 提供者建立暫時對稱金鑰。

AUTHORIZATION owner_name

指定擁有此金鑰的資料庫使用者或應用程式角色名稱。

FROM PROVIDER provider_name

指定可延伸金鑰管理 (EKM) 提供者和名稱。 金鑰不會從 EKM 裝置匯出。 提供者必須先使用 CREATE PROVIDER 語句來定義。 如需建立外部金鑰提供者的詳細資訊,請參閱可延伸金鑰管理 (EKM)

注意

自主資料庫中無法使用此選項。

KEY_SOURCE = 'pass_phrase'

指定要從中衍生金鑰的複雜密碼。

IDENTITY_VALUE = 'identity_phrase'

指定要從中產生 GUID 來標記利用暫時金鑰加密的資料之識別片語。

PROVIDER_KEY_NAME = 'key_name_in_provider'

指定在可延伸金鑰管理提供者中所參考的名稱。

注意

自主資料庫中無法使用此選項。

CREATION_DISPOSITION = { CREATE_NEW |OPEN_EXISTING }

建立或對應對稱金鑰至可延伸金鑰管理裝置。

  • CREATE_NEW

    在可延伸金鑰管理裝置上建立新的金鑰。 如果裝置上已經有金鑰,語句就會失敗,並出現錯誤。

  • OPEN_EXISTING

    將 SQL Server 對稱金鑰對應至現有的「可延伸金鑰管理」金鑰。 如果未 CREATION_DISPOSITION = OPEN_EXISTING 提供,這會預設為 CREATE_NEW

certificate_name

指定用來加密對稱金鑰的憑證名稱。 這個憑證必須已存在於資料庫中。

'password'

指定衍生 TRIPLE_DES 金鑰的密碼,其可以用於保護對稱金鑰的安全。 password 必須符合執行 SQL Server 執行個體之電腦的 Windows 密碼原則需求。 一律使用強式密碼。

symmetric_key_name

指定要用於將建立的金鑰加密之對稱金鑰。 指定的金鑰必須已存在於資料庫中,且該金鑰必須是開啟的。

asym_key_name

指定要用於將建立的金鑰加密之非對稱金鑰。 這個非對稱金鑰必須已存在於資料庫中。

<algorithm>

指定加密演算法。

警告

開頭為 SQL Server 2016 (13.x),所有 AES_128、AES_192 與 AES_256 以外的演算法均已退場。 若要使用較舊的演算法 (不建議),您必須將資料庫相容性層級設定為 120 或更低。

備註

建立對稱金鑰時,必須使用下列其中一個選項來加密對稱密鑰:

  • 憑證 (certificate)
  • password
  • 對稱金鑰 (symmetric key)
  • 非對稱金鑰
  • 提供者

針對每一種類型,金鑰都可以有多個加密。 換句話說,可以同時利用多個憑證、密碼、對稱金鑰及非對稱金鑰來加密單一對稱金鑰。

警告

當對稱金鑰是使用密碼進行加密而不是使用憑證 (或其他金鑰) 時,系統會使用 TRIPLE DES 加密演算法將該密碼加密。 因此,利用強式加密演算法 (如 AES) 建立的金鑰,其本身的安全是由較弱的演算法來維護的。

將金鑰散發至多個使用者之前,可先利用選擇性的密碼來加密對稱金鑰。

暫時金鑰由建立它們的使用者擁有。 暫時金鑰只能用於目前的工作階段。

IDENTITY_VALUE 會產生 GUID,用來標記使用新對稱金鑰加密的數據。 這項標記作業可用於使金鑰符合加密的資料。 特定片語產生的 GUID 一律相同。 使用片語產生 GUID 之後,只要此資料庫中至少有一個對稱密鑰主動使用片語,就無法重複使用該片語。 IDENTITY_VALUE 是選擇性子句;不過,建議您在儲存以暫存密鑰加密的數據時使用它。

沒有預設加密演算法。

重要

我們不建議使用 RC4 和 RC4_128數據流加密來保護敏感數據。 SQL Server 不會進一步編碼使用這類金鑰執行的加密。

您可以在 sys.symmetric_keys 目錄檢視中,看到有關對稱金鑰的資訊。

對稱金鑰無法由從加密提供者建立的對稱金鑰加密。

釐清有關 DES 演算法的資訊

  • DESX 未正確命名。 以 ALGORITHM = DESX 建立的對稱金鑰實際上使用具有 192 位元金鑰的 TRIPLE DES 加密。 未提供 DESX 演算法。 SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。
  • 以 ALGORITHM = TRIPLE_DES_3KEY 建立的對稱金鑰使用具有 192 位元金鑰的 TRIPLE DES。
  • 以 ALGORITHM = TRIPLE_DES 建立的對稱金鑰使用具有 128 位元金鑰的 TRIPLE DES。

取代 RC4 演算法

重複對不同數據區塊使用相同的 RC4 或RC4_128 KEY_GUID,會導致相同的 RC4 索引鍵,因為 SQL Server 不會自動提供 salt。 重複使用相同的 RC4 金鑰是一個已知的錯誤,導致非常弱的加密。 因此,我們取代了 RC4 和 RC4_128 關鍵字。 SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

警告

只有 RC4 演算法支援回溯相容性。 只有在資料庫相容性層級為 90 或 100 時,才能使用 RC4 或 RC4_128 加密新資料 (不建議使用)。請改用較新的演算法,例如其中一個 AES 演算法。 在 SQL Server 中,使用 RC4 或 RC4_128 加密的材料可以在任何相容性層級中進行解密。

權限

需要資料庫的 ALTER ANY SYMMETRIC KEY 權限。 如果 AUTHORIZATION 已指定,則需要資料庫使用者的 IMPERSONATE 許可權,或應用程式角色的 ALTER 許可權。 如果是利用憑證或非對稱金鑰來加密,則需要憑證或非對稱金鑰的 VIEW DEFINITION 權限。 只有 Windows 登入、SQL Server 登入及應用程式角色可以擁有對稱金鑰。 群組和角色無法擁有對稱金鑰。

範例

A. 建立對稱金鑰

下列範例會利用 JanainaKey09 演算法建立一個稱為 AES 256 的對稱金鑰,然後利用憑證 Shipping04 加密新金鑰。

CREATE SYMMETRIC KEY JanainaKey09
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Shipping04;
GO

B. 建立暫時對稱金鑰

下列範例會從複雜密碼建立名為 的暫時對稱密鑰 #MarketingXXVThe square of the hypotenuse is equal to the sum of the squares of the sides。 金鑰由某 GUID 提供,該 GUID 是從字串 Pythagoras 產生且利用憑證 Marketing25 來加密的。

CREATE SYMMETRIC KEY #MarketingXXV
WITH ALGORITHM = AES_128,
KEY_SOURCE
     = 'The square of the hypotenuse is equal to the sum of the squares of the sides',
IDENTITY_VALUE = 'Pythagoras'
ENCRYPTION BY CERTIFICATE Marketing25;
GO

C. 使用可延伸金鑰管理建立對稱金鑰 (EKM) 裝置

下列範例會使用稱為 MySymKey 的提供者與 MyEKMProvider 的金鑰名稱,建立稱為 KeyForSensitiveData 的對稱金鑰。 其會將授權指派給 User1,並假設系統管理員已經在 SQL Server 中註冊稱為 MyEKMProvider 的提供者。

CREATE SYMMETRIC KEY MySymKey
AUTHORIZATION User1
FROM PROVIDER EKMProvider
WITH
PROVIDER_KEY_NAME='KeyForSensitiveData',
CREATION_DISPOSITION=OPEN_EXISTING;
GO

另請參閱