【问题标题】:I want to hide the script of a stored procedure in SQL Server 2008我想在 SQL Server 2008 中隐藏存储过程的脚本
【发布时间】:2012-03-04 12:07:20
【问题描述】:

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

现在只是我不想让任何人看到或编辑我的脚本。

请记住,我正在使用标准登录 ID 和密码。 这是与每个人共享的。

因此,我可以通过某种方式让每个人都执行该过程。 但他们不应该看到脚本。

干杯! 谢谢

【问题讨论】:

  • 您应该解决安全问题,而不是加密。没有理由让每个人都以相同的权限登录。

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


【解决方案1】:

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

CREATE PROCEDURE usp_MyProc
WITH ENCRYPTION
AS
SELECT *
FROM myTable

只是一个警告,来自 MSDN:

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

一些参考资料和进一步阅读:

【讨论】:

  • 另外,SQL Server中的WITH ENCRYPTION其实应该叫WITH MINOR_OBFUSCATION。如果您知道自己在搜索什么,那里有大量资源可以帮助解密系统对象,而且它们不限于特权用户或 DAC。
  • 没错,它不会阻止那些决心查看代码的人,但它会阻止绝大多数人。
【解决方案2】:

SQL Server 并没有真正提供保护模块代码的万无一失的方法。 WITH ENCRYPTION 子句应该按照WITH LOOSE_OBFUSCATION 的方式命名,因为“加密”很容易被阻止。除了最不经意的旁观者之外,您将无法在 SQL Server 中使用任何东西来使任何人无法解读代码 - 任何人都确定能够在不费吹灰之力的情况下击败本机方法。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 任何人仍然可以运行 SP,对吗?只是代码被隐藏了
    【解决方案4】:

    避免使用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. 个体实体级别

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多