我是一名目前正在小公司实习的学士学生,并被要求了解如何实现数据库中某些数据的加密,最好不必更改已经访问数据库的脚本。我一直在挖掘两个方向,分别使用带有PostgreSQL内置加密功能的触发器/视图来加密/解密数据,并在输入和输出函数中实现带有加密逻辑的基本数据类型。
之后,我一直在运行一个小脚本来查看数据库花了多少时间进行简单的插入和选择PostgreSQL和MySQL中的简单表(我的参考因为公司目前正在使用它)和表格与我的解决方案。让我感到惊讶的结果是MySQL和PostgreSQL速度之间存在巨大差异,千万选择速度慢了10倍。
据我所知,数据量非常小,数据库尚未调整,因此可以获得至少与MySQL相同的性能?我没有关于正在运行的数据库的大量信息,但从我所读到的数据库的性能来看,很大程度上取决于配置文件(硬件,数据组织,查询类型)。是否存在PostgreSQL优于MySQL的典型案例?除此之外,这些解决方案是否存在固有的错误?我仍然需要为加密/解密设计密钥分发系统,但我被告知暂时放在那边。
编辑:测试数据库我使用bash脚本和psql和mysql命令行工具,以及时间戳来评估一些操作所花费的时间(1次插入1000行和1000次插入1行,对于select语句相同)。
Edit2:关于加密我有两个实现的想法。
像
CREATE VIEW data AS
SELECT pgp_sym_decrypt(nom::bytea, 'Password'),id
FROM data_encrypt;
和一组适用于INSERT,UPDATE和DELETE查询的视图数据的触发器,如
CREATE OR REPLACE FUNCTION encrypt_nom() RETURNS TRIGGER AS $example_table$
BEGIN
UPDATE data_encrypt SET nom = (pgp_sym_encrypt(NEW.nom,'Password'))WHERE id=NEW.id;
RETURN NEW;
END;
$example_table$ LANGUAGE plpgsql;
CREATE TRIGGER insert_encrypt INSTEAD OF UPDATE ON data FOR EACH ROW EXECUTE PROCEDURE encrypt_nom();
因此,当用户查询视图数据时,想法是使用pgp_sym_encrypt / decrypt(AES with salt)函数从data_encrypt透明地加密/解密。
正如我所说,我将加密/解密功能实现为here
所描述的输入/输出功能由于它的C代码我打算使用像露面的开放式库
但我再次被要求不考虑当前的密钥分配,只考虑加密的可行性,这最终可能成为未来的一大块(如果出于某种原因,它无法运行)这些方法的外部软件。)
对于要加密的数据,我必须承认我有点迷茫:无法访问数据库,我唯一被告知的是它在InnoDB的Mysql上运行并且它& #39;通过本地主机访问。没有多大帮助。我想一些来自客户或员工的敏感个人数据。