Если я сделаю шифрование / дешифрование в MySQL (в отличие от приложения), будет ли в действительности записан открытый текст? - PullRequest
1 голос
/ 04 ноября 2011

Я использую движок InnoDB MySQL.

Я делаю шифрование в хранимой процедуре и затем записываю в таблицы.

Кажется, что это будет запись низкого уровняизменения в БД.Эти данные уже зашифрованы (если это необходимо).

Насколько я понимаю, существует два разных типа журналов, которые могут записывать изменения в БД:

  1. Повторlog (группа ib_logfile), которая исправляет недоделанную транзакцию в случае сбоя.
  2. Двоичный журнал, который используется для репликации и восстановления из резервной копии.

    (источник: 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

Но я все еще хотел бы знать о журнале повторов.

Ответы [ 4 ]

1 голос
/ 09 марта 2012

Лучше зашифровать данные в приложении.Любая регистрация оттуда будет иметь зашифрованные данные.Мы используем 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 очень неохотно передают CC data в двоичные журналы MySQL, даже если вы используете репликацию на основе строк.Для кого-то слишком легко это изменить.

1 голос
/ 04 ноября 2011

Может быть.Если ваш сервер MySQL настроен на запись всех операторов в общий журнал запросов, или если у вас включено двоичное ведение журнала и не настроено использование формата на основе строк, в нем будут записываться открытый текст и ключ.

Кроме того, выполнение шифрования / дешифрования в базе данных может раскрыть ваши данные злоумышленнику, который может изменить хранимые процедуры.Это вообще не хорошая идея;Я бы избежал этого.

0 голосов
/ 11 ноября 2011

Открытый текст зарегистрирован, это то, о чем спрашивает ОП, я думаю.

    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'))
0 голосов
/ 04 ноября 2011

На каких знаниях вы основываете идею, что открытый текст будет зарегистрирован?Что именно делает хранимая процедура?

...