哪些数据库支持加密

时间:2010-07-08 04:12:03

标签: php mysql database encryption

我广泛使用MySQL,但如果没有外部库,它不支持数据库级加密。

内置db-level支持的数据库是什么,如果你知道MySQL足以进行比较,它的语法与MySQL有多接近。我显然不想重新学习一切。

我还广泛使用PDO来处理sql注入,因此理想的PDO友好是首选。

4 个答案:

答案 0 :(得分:2)

绝对

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

我不确定每个字段是否只有一次调用AES_DECRYPT。

答案 1 :(得分:1)

我知道Oracle 11g支持数据库级加密,但我不会说它与MySQL最相似......

答案 2 :(得分:1)

我刚刚研究了同样的问题,因为我在SQL Server中使用了列和数据库级加密后正在调查mySQL。

所以这回答了我的担忧,即mySQL没有开箱即用的数据库级加密,但是在上面给出的答案中值得一提的是,每次调用它都会导致表扫描。这是因为必须读取每一行,以便在比较之前解密数据。这会使任何可能放在列上的索引失效(如果那里也有任何值!)但是下面的语句会做同样的事情,但只调用一次ENCRYPT并可能绕过任何表扫描。注意:mySQL语法在某些地方可能不正确。

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

SELECT 
   *, 
  $input as `decrypted` 
FROM enc 
WHERE 
  `field`=$EncryptedValue

答案 3 :(得分:0)

如果有人感兴趣,请向回答者添加更多内容:

排序 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不能使用的二进制字符串