Sql server CLR存储过程是自动加密的
我创建了一个简单的CLR过程来创建一个文件夹。问题是,每次我使用“CREATEPROCEDURE…”语句在SQL Server内部创建过程时,该过程都会自动加密。我没有使用WITH ENCRYPTION子句,而且我也知道它不能用于CLR对象,所以我在这里感到困惑。 这是我的密码:Sql server CLR存储过程是自动加密的,sql-server,sql-server-2008-r2,sqlclr,Sql Server,Sql Server 2008 R2,Sqlclr,我创建了一个简单的CLR过程来创建一个文件夹。问题是,每次我使用“CREATEPROCEDURE…”语句在SQL Server内部创建过程时,该过程都会自动加密。我没有使用WITH ENCRYPTION子句,而且我也知道它不能用于CLR对象,所以我在这里感到困惑。 这是我的密码: CREATE PROCEDURE CreateFolder(@Path nvarchar(500), @FolderName nvarchar(50), @ReturnCode int output, @ReturnM
CREATE PROCEDURE CreateFolder(@Path nvarchar(500), @FolderName nvarchar(50), @ReturnCode int output, @ReturnMessage nvarchar(500) output )
WITH EXECUTE AS OWNER
AS
EXTERNAL NAME MyLibrary.[MyLibrary.StoredProcedures].CreateFolder
GO
我使用的是SQLServer2008R2工作组版
非常感谢您的帮助
谢谢。它只是显示为加密的,因为您在Management Studio中看不到它的代码吗?您无法编写脚本进行更改或其他操作,这可能就是原因。是否因为在Management Studio中看不到其代码而将其显示为加密的?您无法编写脚本来更改或执行任何操作,这可能就是为什么SQLCLR对象未加密的原因。事实上,如问题中所述,
WITH ENCRYPTION
选项甚至不适用于SQLCLR对象。它们在SSMS中显示为加密的原因并不是因为看不到它们的定义,而是因为它们一开始甚至没有定义。如果查看sys.sql_modules,可以看到存储过程、函数、触发器、视图等的定义,但它们都不是SQLCLR对象。此外,如果查看目录视图,则有一个名为的字段具有默认值
,根据链接的MSDN页面:
SQL Server仅维护此目录视图中CLR对象的默认值;因此,对于Transact-SQL对象,此列的值为0。要查看Transact-SQL对象中参数的默认值,请查询sys.SQL\u模块目录视图的定义列,或使用对象定义系统函数
SQLCLR对象的
CREATE
语句(如问题中所示)在每次请求时都从元数据生成。SQLCLR对象未加密。事实上,如问题中所述,WITH ENCRYPTION
选项甚至不适用于SQLCLR对象。它们在SSMS中显示为加密的原因并不是因为看不到它们的定义,而是因为它们一开始甚至没有定义。如果查看sys.sql_modules,可以看到存储过程、函数、触发器、视图等的定义,但它们都不是SQLCLR对象。此外,如果查看目录视图,则有一个名为的字段具有默认值
,根据链接的MSDN页面:
SQL Server仅维护此目录视图中CLR对象的默认值;因此,对于Transact-SQL对象,此列的值为0。要查看Transact-SQL对象中参数的默认值,请查询sys.SQL\u模块目录视图的定义列,或使用对象定义系统函数
SQLCLR对象的
CREATE
语句(如问题中所示)是在每次请求元数据时根据元数据生成的。您是对的。我无法打开该过程,但我仍然可以通过将其脚本化为“创建”来查看代码谢谢,你说得对。我无法打开该过程,但我仍然可以通过将其脚本化为“创建”来查看代码非常感谢。