Sql server 我想在SQL Server中隐藏我的视图

Sql server 我想在SQL Server中隐藏我的视图,sql-server,views,Sql Server,Views,我们是一家小型BI咨询公司。BI应用程序使用视图从服务器获取数据 随着我们的发展,我们需要确保查询/视图的安全性,以便在未经我们许可的情况下不能复制或重用它们。它们将在客户端服务器机器上运行 我想知道是否有隐藏/保护视图的方法,以便在需要更改时只有我可以访问它,否则没有人可以看到代码 关于如果您可以指望他们没有sa密码或系统管理员角色成员身份,那么您可以使用视图定义权限来控制谁可以查看您的视图定义: DENY VIEW DEFINITION ON someview TO username 当然

我们是一家小型BI咨询公司。BI应用程序使用视图从服务器获取数据

随着我们的发展,我们需要确保查询/视图的安全性,以便在未经我们许可的情况下不能复制或重用它们。它们将在客户端服务器机器上运行

我想知道是否有隐藏/保护视图的方法,以便在需要更改时只有我可以访问它,否则没有人可以看到代码


关于

如果您可以指望他们没有sa密码或系统管理员角色成员身份,那么您可以使用视图定义权限来控制谁可以查看您的视图定义:

DENY VIEW DEFINITION ON someview TO username
当然,您不能禁止他们查看视图的名称——应用程序本身需要能够从视图中进行选择

如果他们具有sysadmin权限,那么您可以对视图定义使用WITH ENCRYPTION来阻止任何人(甚至sa)检索定义

CREATE VIEW someview WITH ENCRYPTION AS ....
由于您自己无法从数据库中检索它,因此最好将视图定义保存在单独的源代码管理系统中。你无论如何都应该这么做

编辑:正如marc_正确指出的那样,使用加密并不是真正安全的。如果你下定决心,还是有办法解密的。看


不,没有。客户的DBA将始终能够看到视图,包括它们的定义。这是无法防止的。除非您是客户机数据库的DBA,并且客户机对其数据库没有DBA访问权限,否则您不能这样做。如果您真的想保护这一点,您应该使用web服务,并在您的端托管sql server。但老实说,在您的查询中不太可能有任何突破性的逻辑。另一种选择是与您的客户建立一个体面的SLA,以便他们同意不复制这些SLA。如果他们这样做了,这至少给了你一些追索权。妄想症:即使他们还没有DBA访问权,如果它托管在他们的物理机器上,那么他们也可以得到它。有趣。“人们如何着手修改这样的东西呢?不太清楚你在问什么,”叉车说。是否修改已使用加密创建的视图?您需要源代码,保存在其他地方,然后将其粘贴到ALTER VIEW someview(加密为)中…但是任何一位称职的DBA都将拥有脚本链接,可以非常轻松地解密任何具有加密视图的数据-这最终并不是什么有用的东西。。。它假装是一种保护措施,但实际上不是…@RossPresser,谢谢你提供的信息。我以前没听说过加密。听起来右键单击->修改在这种情况下根本不起作用。编辑了“承认失败”的答案,包括指向另一个问题的链接。“这只是一个障碍,不是一堵墙,”叉车说。