我经常使用MySQL,但是它不支持数据库级别的加密,除非使用一些外部库。
有哪些数据库自带数据库级别的支持?如果你了解MySQL,能否比较一下它们的语法接近程度?我显然不想重新学习所有东西。
我还广泛使用PDO来处理SQL注入,因此最好选择PDO友好的数据库。
我经常使用MySQL,但是它不支持数据库级别的加密,除非使用一些外部库。
有哪些数据库自带数据库级别的支持?如果你了解MySQL,能否比较一下它们的语法接近程度?我显然不想重新学习所有东西。
我还广泛使用PDO来处理SQL注入,因此最好选择PDO友好的数据库。
SELECT *, AES_DECRYPT(`field`, 'key') as `decrypted` FROM enc WHERE AES_DECRYPT(`field`, 'key')='$input'
我不确定是否有一种方法只调用一次AES_DECRYPT函数来处理每个字段。
我最近在研究mySQL,因为我之前在SQL Server中使用了列级和数据库级加密。我正在调查同样的问题。
所以这回答了我的疑虑,即mySQL没有开箱即用的数据库级加密,但值得一提的是,在上面给出的答案中,每次调用它都会导致表扫描。这是因为每行都必须被读取,以便在比较之前可以解密数据。这使得可能已经放在列上的任何索引无效(如果有价值的话!)然而,以下语句将执行相同的操作,但仅调用一次ENCRYPT,并可能避免任何表扫描。注意:mySQL语法可能有错误。
DECLARE $EncryptedValue ...
SELECT $EncryptedValue = AES_ENCRYPT(`$input`, 'key')
SELECT
*,
$input as `decrypted`
FROM enc
WHERE
`field`=$EncryptedValue
如果有人感兴趣,可以进一步补充答案:
要对一个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 . "%'))
select column from table where encrypted column = $input
?如果您提供更多详细信息,请随时将评论发布为答案。 - cooper