CREATE SYMMETRIC KEY (Transact-SQL)

更新日期: 2008 年 11 月 17 日

生成对称密钥并指定其属性。

主题链接图标Transact-SQL 语法约定

语法

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

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

<key_options> ::=
    KEY_SOURCE = 'pass_phrase'
    |
    ALGORITHM = <algorithm>
    |
    IDENTITY_VALUE = 'identity_phrase'

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

参数

  • key_name
    对称密钥在数据库中所使用的唯一名称。临时密钥的名称应当以数字符号 (#) 开头。例如,#temporaryKey900007。您不能创建名称以多个 # 开头的对称密钥。
  • AUTHORIZATION owner_name
    指定将拥有此密钥的数据库用户或应用程序角色的名称。
  • certificate_name
    指定将用于对对称密钥进行加密的证书的名称。该证书必须已存在于数据库中。
  • 'password'
    指定一个密码,从该密码派生出用来保护对称密钥的 TRIPLE_DES 密钥。将检查密码的复杂性。应始终使用强密码。
  • symmetric_key_name
    指定将用于对要创建的密钥进行加密的对称密钥。指定的密钥必须已存在于数据库中,并且必须打开。
  • asym_key_name
    指定将用于对要创建的密钥进行加密的非对称密钥。此非对称密钥必须已经存在于数据库中。
  • KEY_SOURCE ='pass_phrase'
    指定从中派生密钥的通行短语。
  • IDENTITY_VALUE ='identity_phrase'
    指定一个标识短语,根据该短语生成用于标记使用临时密钥加密的数据的 GUID。

备注

当创建对称密钥时,必须使用下列至少一项对其进行加密:证书、密码、对称密钥和非对称密钥。可使用上述每种类型中的多项对密钥进行加密。换言之,可以同时使用多个证书、密码、对称密钥以及非对称密钥对单个对称密钥进行加密。

ms188357.Caution(zh-cn,SQL.90).gif注意:
当使用密码(而不是数据库主密钥的公钥)对对称密钥进行加密时,便会使用 TRIPLE_DES 加密算法。因此,用强加密算法(如 AES)创建的密钥本身受较弱算法的保护。

在将对称密钥分发给多个用户之前,可以使用可选的密码对该密钥进行加密。

临时密钥由创建它们的用户所拥有。临时密钥只对当前会话有效。

IDENTITY_VALUE 生成一个 GUID,使用该 GUID 来标记使用新对称密钥加密的数据。该标记可用于将密钥与加密数据进行匹配。由某个特定短语生成的 GUID 始终相同。使用短语生成 GUID 之后,如果没有删除关联的对称密钥,则不能在当前会话中再次使用该短语。IDENTITY_VALUE 是一个可选的子句;但是,我们建议在存储使用临时密钥加密的数据时使用该子句。

没有默认的加密算法。

ms188357.note(zh-cn,SQL.90).gif重要提示:
建议不要使用 RC4 和 RC4_128 序列密码保护敏感数据。SQL Server 2005 不会对使用此类密钥执行的加密执行 salt 操作。

可以在 sys.symmetric_keys 目录视图中查看对称密钥的有关信息。

关于 DES 算法的说明:

  • DESX 的命名不正确。使用 ALGORITHM = DESX 创建的对称密钥实际上使用的是具有 192 位密钥的 TRIPLE DES 密码。不提供 DESX 算法。
  • 使用 ALGORITHM = TRIPLE_DES 创建的对称密钥使用的是具有 128 位密钥的 TRIPLE DES。

权限

要求对数据库具有 ALTER ANY SYMMETRIC KEY 权限。如果指定了 AUTHORIZATION,则要求对数据库用户具有 IMPERSONATE 权限,或者对应用程序角色具有 ALTER 权限。如果使用证书或非对称密钥进行加密,则要求对证书或非对称密钥具有 VIEW DEFINITION 权限。

示例

A. 创建对称密钥

下面的示例使用 AES 256 算法创建名为 JanainaKey09 的对称密钥,然后使用证书 Shipping04 对新密钥进行加密。

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

B. 创建临时对称密钥

下面的示例用通行短语 The square of the hypotenuse is equal to the sum of the squares of the sides 创建了一个名为 #MarketingXXV 的临时对称密钥。为该密钥提供了通过字符串 Pythagoras 生成的 GUID,并使用证书 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

请参阅

参考

ALTER SYMMETRIC KEY (Transact-SQL)
DROP SYMMETRIC KEY (Transact-SQL)
sys.symmetric_keys (Transact-SQL)

其他资源

选择加密算法
加密层次结构

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

版本 历史记录

2005 年 12 月 5 日

新增内容:
  • 添加了有关使用 RC4 和 RC4_128 序列密码的重要说明。

2008 年 11 月 17 日

新增内容:
  • 增加了有关 DESX 算法的说明。