我们即将进行一个项目,我们将处理高度敏感的数据。除了加密数据之外,我还在考虑混淆表名称。
因此
tEmployees
会变成 t58633B7A
。添加这个有用吗?毕竟这是关于构建安全/预防层。
附注我们将把混淆的表名映射到数据访问层中的真实姓名
这似乎完全是多余的。如果攻击者获得了对数据库的访问权限,那么从总体上看,仅仅不知道表名就几乎没有什么保护作用。如果有的话,您应该花时间在更好的入侵检测和保护机制上。
尽管您会一遍又一遍地听到“通过默默无闻实现安全”不好,但它确实有助于提高攻击门槛,只要您记住这不是一个解决方案。 对于您的具体情况,我想说,维护、调试、排除数据库故障的成本将超过少量感知安全性带来的好处。
嗯,不是真的......它确实具有在面试时吓跑真正人才的功能,并且可能会让你在 TheDailyWTF 上被提及。
例如,创建带有列的 EMPLOYEE(隐藏在 table_1 中):
名称代码 数据类型
ID F1 整数
名称 F2 VARCHAR(50)
出生日期 F3 日期
同时在SQLServer中照常创建表(您可以从生成数据库菜单中获取脚本)
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-symmetry-key-encryption-tutorial-带脚本/
)
当然,使用这种技术,用户仍然可以从视图中访问表,但是用户无法获取表与主键和外键的相互关系,视图没有关系信息。
但是,如果您完全混淆此过程而不使用视图,则必须使用从 PDM 收集的表信息进行编码。
希望能帮到你。由于我和你有同样的问题,当数据库使用管理帐户连接到计算机时,数据库会暴露给用户。