64位SQL Server环境中的加密解密解决方案

在将应用程序迁移到64位SQL Server实例的过程中,遇到了一个常见的问题:32位DLL无法在64位环境中加载。这导致之前使用的Rijndael.dll无法继续使用,而这个DLL是用来通过xp_OA创建的扩展存储过程来加密和解密字符串的。由于不能将数据以这种组件和算法加密后的形式留在数据库中,也不能逆向工程这个组件,因此需要寻找替代方案。

在CLR程序集(SQL Server项目)中,不能使用任何外部DLL,除非它是.NET Framework的一部分。这意味着不能直接引用任何外部程序集。只能通过asmx Web服务和WCF服务来获取外部组件的服务。因此,编写了一个CLR程序集和一个asmx Web服务来解决这个问题。

配置、步骤和代码讨论

首先,创建一个Web服务,并在其中添加对COM组件的引用,然后公开Web方法。接着,创建一个新的数据库项目。

为了使程序集能够访问Web服务(这是一个外部组件),需要将程序集的XML序列化设置为true。

public partial class StoredProcedures { [Microsoft.SqlServer.Server.SqlProcedure] public static void EncryptString(string plainString) { // 在这里放置Web服务访问代码 } [Microsoft.SqlServer.Server.SqlProcedure] public static void DecryptString(string encryptedString) { // 在这里放置Web服务访问代码 } }

现在,构建SQL Server项目。

部署

首先,需要通过执行以下SQL命令来启用数据库的CLR:

EXEC sp_configure 'show advanced options', '1'; GO RECONFIGURE; GO EXEC sp_configure 'clr enabled', '1'; GO RECONFIGURE; GO

然后,需要将数据库设置为TRUSTWORTHY:

ALTER DATABASE <DB Name> SET TRUSTWORTHY ON;

要部署CLR程序集,打开SQL Server管理工作室,选择想要部署的数据库,然后运行创建程序集的命令。首先部署SqlServerProject1.dll程序集。

CREATE ASSEMBLY SqlServerProject1 FROM 'C:\Documents and Settings\My Documents\Visual Studio 2008\Projects\CLRWebS\SqlServerProject1\bin\SqlServerProject1.dll' WITH PERMISSION_SET = EXTERNAL;

然后部署序列化程序集SqlServerProject1.XmlSerializers.dll。

CREATE ASSEMBLY SqlServerProject1xml FROM 'C:\Documents and Settings\My Documents\Visual Studio 2008\Projects\CLRWebS\SqlServerProject1\bin\SqlServerProject1.XmlSerializers.dll' WITH PERMISSION_SET = SAFE;

测试

部署CLR后,两个存储过程将被列出,现在可以轻松地进行测试。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485