混淆数据库表名称

时间:2010-02-11 18:01:22

标签: sql-server obfuscation

我们即将开展一个项目,我们将处理高度敏感的数据。除了加密数据,我还在考虑模糊表名。

因此,tEmployees会成为t58633B7A。这会有用吗?毕竟它是关于建立安全/预防的层次。

P.S。我们将模糊处理的表名映射到数据访问层中的实名

5 个答案:

答案 0 :(得分:15)

这似乎完全是多余的。如果攻击者已获得对数据库的访问权限,那么根本不知道表名称在宏观方案中几乎没有保护。你应该把时间花在更好的入侵检测和保护机制上。

答案 1 :(得分:6)

虽然你会一遍又一遍地听到安全性通过默默无闻是坏的,但它确实有助于提高攻击力度,只要你记住它不是解决方案。

对于您的具体情况,我会说维护,调试和排除数据库故障的成本将超过微小的安全感所带来的好处。

答案 2 :(得分:5)

多么浪费时间。

嗯,不是真的.....它确实具有在采访中吓跑实际人才的功能,并且可能会让你在TheDailyWTF上提及。

答案 3 :(得分:2)

我想说这可能是浪费时间。如果有人可以破解你的程序足以访问你的数据库,那么无论如何你都搞砸了,这个黑客会在心跳中找出你愚蠢的混淆方案。

答案 4 :(得分:0)

尝试使用PowerDesigner设计数据库。设计表(物理数据模型,PDM)时,有列名和列代码。输入具有可读字段名称的列名称,但对于列代码,请输入不可读的字段名称。

例如,使用列创建EMPLOYEE(隐藏到table_1):

    NAME     CODE     DATA TYPE
    ID       F1       INTEGER
    NAME     F2       VARCHAR(50)
    DOB      F3       DATE

同时在SQLServer中创建表格(可以从Generate Database Menu获取脚本)

CREATE TABLE table_1(
f1 int,
f2 varchar(50),
f3 date);

并创建视图

CREATE VIEW EMPLOYEE WITH ENCRYPTION
AS  
SELECT f1 ID,f2 NAME ,f3 DOB 
FROM table_1

WITH ENCRYPTION子句阻止用户查看sql语句以构成视图。

在应用程序代码中使用视图EMPLOYEE而不是table_1

示例:

insert into EMPLOYEE values('1','kevin','1972/11/24'); 
insert into EMPLOYEE values('2','ted sulivan','1969/06/12');
insert into EMPLOYEE values('3','wei meng lee','1974/04/17');

SELECT * FROM EMPLOYEE;


并将其与数据加密相结合(参见:http://blog.sqlauthority.com/2009/04/28/sql-server-introduction-to-sql-server-encryption-and-symmetric-key-encryption-tutorial-with-script/
当然使用这种技术,用户仍然可以从视图中访问表,但是用户无法获得与主键和外键的表间关系,视图中没有关系信息。
但是如果你完全混淆这个过程根本不使用视图,你必须使用从PDM收集的表信息进行编码 希望能帮到你。由于我遇到了同样的问题,当数据库附加到具有管理帐户的计算机时,数据库将向用户公开。