隐藏SQL Server数据库架构的方法?

时间:2011-11-25 06:53:46

标签: obfuscation sql-server-express database-schema

有没有办法模糊SQL Server上数据库的架构?

如果我在客户端站点上安装了SQL Server Express,是否有办法模糊架构和数据,以便其他人无法进入并学习架构以便从中提取数据并将其提取到另一个产品中?< / p>

4 个答案:

答案 0 :(得分:10)

隐藏数据库架构的最佳方法是不让它离开您的服务器。

即使您加密架构,您仍然必须在某处提供密钥,如果客户决定获取密钥,他们将花费时间和金钱来完成。

所以你最好不要把你的产品作为服务提供,或者通过做好工作让你的客户忠诚。

答案 1 :(得分:5)

AFAIK,“不”。

“锁定”数据库的最佳方法是:

1)使用适当的角色和用户进行安装(理想情况下,SQL角色和SQL用户创建)

2)明确限制SQL Server中的对象权限

3)将您的应用程序编码为尽可能使用SQL Server存储过程(而不是原始T-SQL)

4)加密存储过程

这是一个可能感兴趣的“SQL Server最佳实践”的良好链接。它讨论了安全问题和(相对)新功能“用户架构分离”:

答案 2 :(得分:1)

这是一个棘手的问题,甚至可能不是100%可能的。但是,设置它有一些技巧:

  1. 使用自定义SA帐户(名称和密码)安装新的名为的SQL Server实例。 SQL Server调用“无人参与安装”的安装方法允许您在ini文件中指定SQL Server的所有安装参数,然后以静默方式运行安装。请查看此处的文档:Unattended Installation of SQL Server 2008 r2
  2. 使用神奇的SQL安装脚本创建数据库,表格,程序等(如果需要,可以使用加密的存储过程,但它们也是可以破解的)
  3. 添加/验证自定义 SA帐户的架构权限,并删除所有管理员角色的所有架构权限。这里的目标是没有角色对您的数据库具有任何架构权限,只有您的自定义SA 用户具有权限(不是由角色分配,而是直接分配给用户)。 / LI>

    我知道有几个商业应用程序甚至没有告诉您他们正在安装MS SQL Express实例。他们也将使用命名的SA帐户创建自己的命名实例。我不能说我喜欢它作为客户(因为SQL在CPU上占据了一席之地,而且我不想在我的工作站上运行“秘密”实例)。但只要您事先向客户披露此信息,他们就可以理解。

    **请记住,熟练的DBA可能具有弄乱系统表以及不手动授予对数据库的访问权限的知识。这些技术实际上只是“混淆”,不会100%防弹。


    作为旁注:由于有大量可用的第三方数据层和网络服务技术,我认为很多公司发现他们的数据库架构不再是专有或有价值的。曾经有一段时间,数据库模式本身就可以代表数百小时的编码。但是今天像EntityFramework,NHibernate,Linq-to-SQL,XPO等工具都会根据您的软件类定义和代码属性为您创建数据库模式。所以只看到一个数据库表并不是很有价值。另外,您可能会在软件中编写一堆业务逻辑,统计分析或其他辅助方法,这些方法不在数据库模式中。在我看来,这就是今天在您的软件的业务逻辑,分析和报告功能中找到的“ value add ” - 而不是在原始数据表中。

    这也是为什么另一张海报建议混淆存储过程的原因,因为如果您编写了一些很好的分析和报告程序,这些可能是数据库模式本身的工作的很多次。它也是客户最有可能想要根据自己的报告需求进行定制的。您可能倾向于制定一项政策,即自定义报告只能由您的公司完成(嘿,即使像SAP这样的大公司也很容易修改什么)。

答案 3 :(得分:1)

有一种方法,它既复杂又丑陋,但它有效。

您有一个主表,可充当其他表的查找表。这个主表看起来像这样:

id,guid,entityname,parent_id

然后将所有表名和列名重命名为guids。之后,在每个查找表中放入一个条目。当你想要选择数据时,你必须通过它们的实体名从指令表中拉出guid,然后为你提供模糊的表名和列名。

有一个主要的软件供应商做了与此非常相似的事情,所以之前已经完成了。