CREATE ASYMMETRIC KEY (Transact-SQL)

在数据库中创建非对称密钥。

适用范围:SQL Server(SQL Server 2008 到当前版本)。

主题链接图标 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'
    指定从中加载公钥的程序集文件。 由 MAX_PATH 根据 Windows API 限制为 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

请参阅

参考

ALTER ASYMMETRIC KEY (Transact-SQL)

DROP ASYMMETRIC KEY (Transact-SQL)

概念

选择加密算法

加密层次结构