如何在SQL Server中加密函数

Jan*_*eYu 1 sql-server encryption function

如何加密SQL Server中的函数,以便其他用户无法编辑?提前致谢.

Dan*_*eld 5

使用ENCRYPTION选项:

CREATE FUNCTION testFunction ()
RETURNS int
WITH ENCRYPTION
AS
BEGIN
RETURN 1
END
Run Code Online (Sandbox Code Playgroud)

这意味着定义不会存储在易于阅读的任何地方,例如:

SELECT m.definition
FROM sys.sql_modules m
JOIN sys.objects o 
on M.object_id = o.object_id AND o.type = 'FN' AND o.name = 'testFunction'
Run Code Online (Sandbox Code Playgroud)

将返回null,如果用户(偶数sysadmin)尝试使用SSMS修改该函数,他们将获得一个MessageBox,指出文本已加密且无法检索.但是,根据MSDN,

使用sys.sql_modules无法查看使用ENCRYPTION选项创建的函数的定义; 但是,会显示有关加密功能的其他信息.

适用于:SQL Server 2008到SQL Server 2016.

指示数据库引擎将CREATE FUNCTION语句的原始文本转换为模糊格式.在任何目录视图中都不能直接看到模糊处理的输出.无权访问系统表或数据库文件的用户无法检索混淆的文本.但是,特权用户可以使用该文本,该用户可以通过DAC端口访问系统表,也可以直接访问数据库文件.此外,可以将调试器附加到服务器进程的用户可以在运行时从内存中检索原始过程.有关访问系统元数据的更多信息,请参阅元数据可见性配置.

使用此选项可防止该函数作为SQL Server复制的一部分发布.无法为CLR函数指定此选项.

您仍应确保维护适当的权限以处理此类方案.你可以在这里深入了解一下.

最后,如果要将其发送给您不希望能够访问源的客户端,如果它们真正持久(使用调试器),它们将能够访问它.