我在SQL Server中编写了一个存储过程。
现在的问题是,我不希望任何人查看或编辑我的脚本。
请记住,我正在使用标准的登录ID和密码。这些信息是与每个人共享的。
因此,我需要一种方法可以让每个人都能执行该存储过程,但他们不能查看脚本。
谢谢!
我在SQL Server中编写了一个存储过程。
现在的问题是,我不希望任何人查看或编辑我的脚本。
请记住,我正在使用标准的登录ID和密码。这些信息是与每个人共享的。
因此,我需要一种方法可以让每个人都能执行该存储过程,但他们不能查看脚本。
谢谢!
WITH ENCRYPTION
,它可以加密你的存储过程的代码。CREATE PROCEDURE usp_MyProc
WITH ENCRYPTION
AS
SELECT *
FROM myTable
需要注意的是,根据MSDN的说明:
没有访问系统表或数据库文件权限的用户无法检索混淆文本。然而,特权用户可以通过DAC端口访问系统表或直接访问数据库文件来获取文本。
以下是一些参考和进一步阅读:
WITH ENCRYPTION
实际上应该称为 WITH MINOR_OBFUSCATION
。如果您知道要搜索什么,那么有很多资源可以帮助解密系统对象,并且它们不限于特权用户或 DAC。 - Aaron BertrandWITH ENCRYPTION
子句应该被命名为WITH LOOSE_OBFUSCATION
之类的东西,因为"加密"很容易被破解。无论你如何使用SQL Server,都无法使代码对非常规查看者以外的所有人难以理解——任何决心破解的人都能够轻松地打败这些本地方法。虽然这可能已经足够满足您的需求,但更安全的方法(但仍不完美)是将一些或所有过程的业务逻辑放入CLR中(在此阅读更多内容)。使用encryption
关键字来对你的存储过程进行加密。这将隐藏代码:
CREATE PROCEDURE dbo.foo
WITH ENCRYPTION
AS
BEGIN
SELECT 'foo'
END
WITH ENCRYPTION
选项。这可能会导致以后出现管理问题。WITH ENCRYPTION
不是隐藏对象的定义/代码的推荐做法。幸运的是,对于SQL Server,有一种替代方法。sp_helptext
查看其代码。T-SQL
或SSMS
来授予或拒绝"查看定义"权限。拒绝授予 View Definition
权限将会为特定用户隐藏对象,并且该用户将无法使用 sp_helptext
查看定义。
其他权限如 SELECT, INSERT
等将保持不变。
权限是灵活的,可以在以下四个级别实现:
谢谢,希望能够消除疑惑。