如果我在MySQL中进行加密/解密(而不是在应用程序中),是否真的会记录明文?

时间:2011-11-04 18:45:14

标签: mysql encryption innodb

我正在使用InnoDB MySQL引擎。

我在存储过程中进行加密,然后写入表。

似乎它会将低级别的更改记录到数据库中。该数据已加密(如果需要)。

据我了解,有两种不同类型的日志可以记录对数据库的更改:

  1. 重做日志(ib_logfile组),它可以在发生崩溃时修复半完成事务。
  2. 二进制日志,用于从备份进行复制和还原。

    (来源:http://dev.mysql.com/doc/refman/5.6/en/glossary.html#glos_ib_logfile

  3. 感谢。

    修改

    找到关于二进制日志的良好链接:http://dev.mysql.com/doc/refman/5.6/en/binary-log.html

    但我仍然想知道重做日志。

4 个答案:

答案 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'))