我们即将开展一个项目,我们将处理高度敏感的数据。除了加密数据,我还在考虑模糊表名。
因此,tEmployees
会成为t58633B7A
。这会有用吗?毕竟它是关于建立安全/预防的层次。
P.S。我们将模糊处理的表名映射到数据访问层中的实名
答案 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收集的表信息进行编码
希望能帮到你。由于我遇到了同样的问题,当数据库附加到具有管理帐户的计算机时,数据库将向用户公开。