在MySql中使用aes_encrypt而不在sql中使用aes_encrypt

时间:2013-06-05 12:11:07

标签: mysql sql

我想做

select name, lower(hex(aes_encrypt(name,'mykey'))) as encValue from myTable;

不使用部分

sql语句中的

lower(hex(aes_encrypt(name,'mykey'))) as encValue

我该怎么做?我可以以某种方式在其他地方进行加密,并且仍然将其与结果一起返回吗?也许在一个功能?我这样做只是为了安全方面,以防安全受到损害。

所以我的结果将是:

name | encValue
me   | s63gd7dnd8dm

1 个答案:

答案 0 :(得分:2)

你可以创建一个这样的函数:

CREATE FUNCTION EncryptName(name VARCHAR(50)) -- use the same type as myTable.name
RETURNS VARCHAR(50)
RETURN LOWER(HEX(AES_ENCRYPT(name,'mykey')));

然后你可以这样做:

SELECT name, EncryptName(name) as encValue FROM myTable;

确保保护此功能定义免受不必要的访问。您正在将安全问题从应用程序层转移到数据库层。

您还可以创建一个视图,以便进一步屏蔽加密过程:

CREATE VIEW EncryptedView AS
SELECT name, LOWER(HEX(AES_ENCRYPT(name,'mykey'))) AS encValue FROM myTable;

然后您可以将其用作常规表:SELECT * FROM EncryptedView。相同的安全问题适用于视图定义。