哪些数据库支持加密?

4

我经常使用MySQL,但是它不支持数据库级别的加密,除非使用一些外部库。

有哪些数据库自带数据库级别的支持?如果你了解MySQL,能否比较一下它们的语法接近程度?我显然不想重新学习所有东西。

我还广泛使用PDO来处理SQL注入,因此最好选择PDO友好的数据库。


2
你真的需要数据库级别加密吗?MySQL确实有加密/解密函数,您可以使用它们来实现列级加密:http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html - quantumSoup
这可能解决我的问题,但在这种情况下,该列是否可搜索?我能否执行此伪代码 select column from table where encrypted column = $input?如果您提供更多详细信息,请随时将评论发布为答案。 - cooper
4个回答

2
当然可以。
SELECT *, AES_DECRYPT(`field`, 'key') as `decrypted` FROM enc WHERE AES_DECRYPT(`field`, 'key')='$input'

我不确定是否有一种方法只调用一次AES_DECRYPT函数来处理每个字段。


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

1

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

所以这回答了我的疑虑,即mySQL没有开箱即用的数据库级加密,但值得一提的是,在上面给出的答案中,每次调用它都会导致表扫描。这是因为每行都必须被读取,以便在比较之前可以解密数据。这使得可能已经放在列上的任何索引无效(如果有价值的话!)然而,以下语句将执行相同的操作,但仅调用一次ENCRYPT,并可能避免任何表扫描。注意:mySQL语法可能有错误。

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

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

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函数使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接