本文使用的为SQL2022版本,2017以上的都可以使用

注册DLL

CREATE ASSEMBLY Base64Functions
	FROM 'C:\your_dll_filepath\filename.dll'
	WITH PERMISSION_SET = SAFE;
GO

执行时可能报错:

针对带有 SAFE 或 EXTERNAL_ACCESS 选项的程序集“filename”的 CREATE 或 ALTER ASSEMBLY 失败,因为 sp_configure 的“CLR 严格安全性”选项设置为
1。Microsoft 建议使用其相应登录名具有 UNSAFE ASSEMBLY 权限的证书或非对称密钥为该程序集签名。或者,也可以使用 sp_add_trusted_assembly 信任程序集。

因为你的SQL Server 启用了“**CLR 严格安全性**”, 此时加载 未签名的程序集(哪怕是SAFE权限)是被禁止的。

解决方案有两个:

方法一:使sp_add_trusted_assembly 信任你的 DLL

1.获取DLL的十六进制哈希(SHA-512)

SELECT HASHBYTES('SHA2_512', BulkColumn)
FROM OPENROWSET(BULK N'C:\your_dll_filepath\filename.dll', SINGLE_BLOB) AS BinaryData;

👉会得到一串128字符的16进制值(SHA-512)

EXEC sp_add_trusted_assembly @hash = 0x你刚才得到的哈希, @description = N'filename';

注意:这里的哈希值,不需要用引号包裹起来

再执行注册语句:

CREATE ASSEMBLY Base64Functions
    FROM 'C:\your_dll_filepath\filename.dll'
    WITH PERMISSION_SET = SAFE;
GO

方法二:关闭CLR严格安全性(不推荐生产环境使用)

-- 启用高级选项
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;

-- 关闭 CLR 严格安全性
EXEC sp_configure 'clr strict security', 0;
RECONFIGURE;

验证注册

SELECT * FROM sys.trusted_assemblies;

主体函数

-- 加密
CREATE FUNCTION dbo.mcFn_EncodeBase64
(
	@EnCode NVARCHAR(MAX)
)
	RETURNS NVARCHAR(MAX)
AS
	EXTERNAL NAME Base64Functions . [Base64Functions] . EncodeBase64;
GO

-- 解码
CREATE FUNCTION dbo.mcFn_DecodeBase64
(
	@EnCode NVARCHAR(MAX)
)
	RETURNS NVARCHAR(MAX)
AS
	
	EXTERNAL NAME Base64Functions . [Base64Functions] . DecodeBase64;
GO