我正在使用InnoDB MySQL引擎。
我在存储过程中进行加密,然后写入表。
似乎它会将低级别的更改记录到数据库中。该数据已加密(如果需要)。
据我了解,有两种不同类型的日志可以记录对数据库的更改:
二进制日志,用于从备份进行复制和还原。
(来源:http://dev.mysql.com/doc/refman/5.6/en/glossary.html#glos_ib_logfile)
感谢。
修改
找到关于二进制日志的良好链接:http://dev.mysql.com/doc/refman/5.6/en/binary-log.html
但我仍然想知道重做日志。
答案 0 :(得分:1)
可能是。如果您的MySQL服务器设置为将所有语句记录到常规查询日志中,或者如果您启用了二进制日志记录而未设置为使用基于行的格式,则会在那里记录明文和密钥。
此外,在数据库中进行加密/解密可能会将您的数据暴露给可以修改存储过程的攻击者。这通常不是一个好主意;我会避免它。
答案 1 :(得分:1)
最好加密应用程序中的数据。从那里进行任何记录都会加密数据。我们使用PHP
使用mcrypt
加密。
$key = mhash(MHASH_MD5, $key);
$cipher = MCRYPT_RIJNDAEL_256;
$vector = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg, MCRYPT_MODE_ECB), MCRYPT_RAND);
$CC_number = mcrypt_encrypt($cipher, $key, "4111111111111111", MCRYPT_MODE_CBC, $vector);
$CC_name = mcrypt_encrypt($cipher, $key, "Prion Interactive", MCRYPT_MODE_CBC, $vector);
对于PCI合规性,您确实需要一个separate key server
来单独存储加密密钥。即使您使用基于行的复制,PCI审计员也非常犹豫在MySQL binlog中传递CC data
。有人改变它太容易了。
答案 2 :(得分:0)
基于什么知识你的基础是将记录明文?存储过程究竟做了什么?
答案 3 :(得分:0)
Cleartext被记录下来,这就是OP想到的问题。
mysql> insert into new_table (col2, col3) values(des_encrypt('asdf1234'),des_encrypt('thisissecret'));
Query OK, 1 row affected (0.01 sec)
[root@test mysql]# mysqlbinlog -s test-bin.000001 | grep secret
insert into new_table (col2, col3) values(des_encrypt('asdf1234'),des_encrypt('thisissecret'))