我在SQL Server中编写了一个存储过程。
现在它只是我不希望任何人看到我的脚本或编辑它。
请记住,我正在处理标准登录ID和密码。 与每个人分享。
因此我可以允许每个人执行该过程。 但是他们不应该看剧本。
干杯! 感谢
答案 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-SQL
或SSMS
来授予或拒绝“视图定义”权限
用于通过SSMS实现权限:
拒绝View Definition
权限将为特定用户隐藏该对象,并且该用户将无法使用sp_helptext
来查看定义
其他权限,例如SELECT, INSERT
等将保持不变。
权限是灵活的,可以在以下四个级别上实现:
谢谢你希望它能消除混乱。