Какие базы данных поддерживают шифрование - PullRequest
4 голосов
/ 08 июля 2010

Я широко использую MySQL, но он не поддерживает шифрование на уровне базы данных без какой-либо внешней библиотеки.

Какие базы данных поставляются со встроенной поддержкой уровня базы данных, и если вы знаете, достаточно MySQL для сравнения, насколько близок его синтаксис к MySQL. Я бы предпочел не переучивать все.

Я также широко использую PDO для обработки инъекций sql, поэтому идеально подходит для PDO.

Ответы [ 4 ]

2 голосов
/ 08 июля 2010

Абсолютно.

SELECT *, AES_DECRYPT(`field`, 'key') as `decrypted` FROM enc WHERE AES_DECRYPT(`field`, 'key')='$input'

Я не уверен, есть ли способ вызывать AES_DECRYPT один раз для каждого поля.

1 голос
/ 05 августа 2010

Я только что исследовал ту же проблему, что и MySQL, после того, как использовал шифрование на уровне столбцов и БД в SQL Server.

Таким образом, это ответило на мои опасения, что mySQL не имеет стандартного шифрования на уровне базы данных, но, возможно, стоит упомянуть в ответе, приведенном выше, это приведет к сканированию таблицы при каждом вызове.Это потому, что каждая строка должна быть прочитана, чтобы данные могли быть расшифрованы перед сравнением.Это делает недействительным любой индекс, который может быть помещен в столбец (если в нем тоже есть какое-либо значение!) Однако следующее утверждение будет делать то же самое, но только один раз вызывает ENCRYPT и, возможно, обходит любые операции сканирования таблицы.Примечание: синтаксис mySQL, вероятно, местами некорректен.

DECLARE $EncryptedValue ...
SELECT $EncryptedValue = AES_ENCRYPT(`$input`, 'key') 

SELECT 
   *, 
  $input as `decrypted` 
FROM enc 
WHERE 
  `field`=$EncryptedValue
1 голос
/ 08 июля 2010

Я знаю, что Oracle 11g поддерживает шифрование на уровне базы данных, но я бы не сказал, что оно наиболее похоже на MySQL ...

0 голосов
/ 20 июля 2011

Добавление большего к ответчику, если кто-то заинтересован:

К сортировка зашифрованное поле AES,

ORDER BY LOWER(CONVERT(AES_DECRYPT(field, 'key') USING latin1))

К поиск в зашифрованном поле AES,

SELECT *, AES_DECRYPT(`field`, 'key') as `decrypted` FROM enc WHERE
LOWER(CONVERT(AES_DECRYPT(`field`, 'key') USING latin1)) LIKE '$input' LOWER('%" . $keyword . "%'))

Это сделано потому, что функция AESE_DECRYPT возвращает двоичную строку, которая не может быть использована LOWER

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...