mssql sqlserver 创建非对称加密密钥的方法分享


摘要:
下文讲述使用sql脚本创建非对称密钥的方法
实验环境:sqlserver 2008 R2


在sqlserver中创建非对称的密钥,我们需采用create asymmetric key 系统函数创建密钥。

CREATE ASYMMETRIC KEY 语法说明:

CREATE ASYMMETRIC KEY Asym_Key_Name
[ AUTHORIZATION database_principal_name ]
[ FROM ]
[ WITH ]
[ ENCRYPTION BY ]
[ ; ]
::=
FILE = ‘path_to_strong-name_file’
| EXECUTABLE FILE = ‘path_to_executable_file’
| ASSEMBLY Assembly_Name
| PROVIDER Provider_Name

::=
ALGORITHM =
|
PROVIDER_KEY_NAME = ‘key_name_in_provider’
|
CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

::=
{ RSA_4096 | RSA_3072 | RSA_2048 | RSA_1024 | RSA_512 }

::=
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 =’key_name_in_provider’
指定来自外部提供程序的密钥名称。
CREATION_DISPOSITION = CREATE_NEW
在可扩展的密钥管理设备上创建新密钥。 PROV_KEY_NAME 必须用于指定设备上的密钥名称。 如果密钥已存在于设备上,此语句将失败,并显示错误。
CREATION_DISPOSITION = OPEN_EXISTING
将 SQL Server 非对称密钥映射到现有可扩展的密钥管理密钥。 PROV_KEY_NAME 必须用于指定设备上的密钥名称。 如果未提供 CREATION_DISPOSITION = OPEN_EXISTING,则默认值为 CREATE_NEW。
ALGORITHM =
可以提供五种算法;RSA_4096、RSA_3072、RSA_2048。
PASSWORD = ‘password’
指定用于对私钥进行加密的密码。 如果未提供该子句,则使用数据库主密钥对私钥进行加密。 password 最多为 128 个字符。 password 必须符合运行 SQL Server 实例的计算机的 Windows 密码策略要求。
备注说明:
“非对称密钥”是数据库级的安全对象实体。 该实体的默认格式包含公钥和私钥。 当未使用 FROM 子句执行时,CREATE ASYMMETRIC KEY 会生成新的密钥对。 当使用 FROM 子句执行时,CREATE ASYMMETRIC KEY 会从文件中导入密钥对,或从程序集中导入公钥。
默认情况下,私钥受数据库主密钥保护。 如果尚未创建任何数据库主密钥,则需要使用密码保护私钥。 如果不存在数据库主密钥,则可以选择性地使用密码。
私钥的长度可以为 512、1024 或 2048 位。


CREATE ASYMMETRIC KEY 创建举例:

例1:
采用 RSA_2048加密算法创建名称为 “testKey”的非对称密钥,并使用密码”abcwewe_AL”保护密钥

CREATE ASYMMETRIC KEY testKey   
    WITH ALGORITHM = RSA_2048   
    ENCRYPTION BY PASSWORD = 'abcwewe_AL';   
   go

例2:
从指定文件中创建密钥

CREATE ASYMMETRIC KEY testKey AUTHORIZATION sa   
    FROM FILE = 'D:\test\test20190418.tmp'    
    ENCRYPTION BY PASSWORD = 'abcwewe_AL';  
GO  

例3:
从 EKMProviderTest密钥管理器中的程序keyTest密钥生成相关密钥

CREATE ASYMMETRIC KEY testKey   
    FROM PROVIDER EKMProviderTest  
    WITH   
        ALGORITHM = RSA_2048,   
        CREATION_DISPOSITION = CREATE_NEW  
        , PROVIDER_KEY_NAME  = 'keyTest' ;  
GO