有没有办法模糊SQL Server上数据库的架构?
如果我在客户端站点上安装了SQL Server Express,是否有办法模糊架构和数据,以便其他人无法进入并学习架构以便从中提取数据并将其提取到另一个产品中?< / p>
答案 0 :(得分:10)
隐藏数据库架构的最佳方法是不让它离开您的服务器。
即使您加密架构,您仍然必须在某处提供密钥,如果客户决定获取密钥,他们将花费时间和金钱来完成。
所以你最好不要把你的产品作为服务提供,或者通过做好工作让你的客户忠诚。
答案 1 :(得分:5)
AFAIK,“不”。
“锁定”数据库的最佳方法是:
1)使用适当的角色和用户进行安装(理想情况下,SQL角色和SQL用户您创建)
2)明确限制SQL Server中的对象权限
3)将您的应用程序编码为尽可能使用SQL Server存储过程(而不是原始T-SQL)
4)加密存储过程
这是一个可能感兴趣的“SQL Server最佳实践”的良好链接。它讨论了安全问题和(相对)新功能“用户架构分离”:
答案 2 :(得分:1)
这是一个棘手的问题,甚至可能不是100%可能的。但是,设置它有一些技巧:
我知道有几个商业应用程序甚至没有告诉您他们正在安装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,然后为你提供模糊的表名和列名。
有一个主要的软件供应商做了与此非常相似的事情,所以之前已经完成了。