我想在SQL Server 2008中隐藏存储过程的脚本

时间:2012-03-04 12:07:20

标签: sql sql-server-2008 stored-procedures

我在SQL Server中编写了一个存储过程。

现在它只是我不希望任何人看到我的脚本或编辑它。

请记住,我正在处理标准登录ID和密码。 与每个人分享。

因此我可以允许每个人执行该过程。 但是他们不应该看剧本。

干杯! 感谢

4 个答案:

答案 0 :(得分:7)

您正在寻找WITH ENCRYPTION,它会对存储过程后面的代码进行加密。

CREATE PROCEDURE usp_MyProc
WITH ENCRYPTION
AS
SELECT *
FROM myTable

只是一个警告,来自MSDN:

  

无权访问系统表或数据库文件的用户无法检索混淆的文本。但是,特权用户可以使用该文本,他们可以通过DAC端口访问系统表,也可以直接访问数据库文件。

一些参考和进一步阅读:

答案 1 :(得分:3)

SQL Server并没有真正提供一种保护模块代码的万无一失的方法。 WITH ENCRYPTION子句应该按WITH LOOSE_OBFUSCATION的方式命名,因为“加密”很容易被阻止。你不可能在SQL Server中使用任何东西来使除了最偶然的旁观者之外的任何人都无法解密代码 - 任何坚定的人都能够毫不费力地击败原生方法。

虽然这可能足以满足您的需求,但可能更安全的方式(但仍然不完美)是将部分或全部程序的业务逻辑into the CLR (read more here)

答案 2 :(得分:2)

对存储过程使用encryption关键字。这将隐藏代码:

CREATE PROCEDURE dbo.foo 
WITH ENCRYPTION 
AS 
BEGIN 
    SELECT 'foo' 
END

答案 3 :(得分:0)

除非常明确的要求外,避免使用WITH ENCRYPTION选项。以后可能会导致管理问题。

建议不要使用WITH ENCRYPTION隐藏对象的定义/代码。幸运的是,SQL Server有另一种方法。

如果需要向用户隐藏任何对象的定义/代码,则可以将标准权限用于此目的。这可以通过授予或撤消“视图定义”权限来完成。

如果任何用户都拒绝了对象的权限查看定义,则该用户将无法在SSMS中查看对象或通过系统存储过程sp_helptext查看其代码。

“视图定义”权限也可以用于SQL Server中的其他对象,例如表,同义词等。可以同时使用T-SQLSSMS来授予或拒绝“视图定义”权限

用于通过SSMS实现权限:

  1. 右键单击隐藏定义所需的对象
  2. 单击“属性”,将出现一个框架,为所选用户或角色选择授予或拒绝对象的“视图定义”权限

拒绝View Definition权限将为特定用户隐藏该对象,并且该用户将无法使用sp_helptext来查看定义

其他权限,例如SELECT, INSERT等将保持不变。

权限是灵活的,可以在以下四个级别上实现:

  1. 服务器级别。在服务器级别,此权限将列为“查看任何定义” 2。数据库级别
  2. 架构级别
  3. 个人实体级别

谢谢你希望它能消除混乱。