0

我想做

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

不使用零件

lower(hex(aes_encrypt(name,'mykey'))) as encValue在 sql 语句中。

我怎样才能做到这一点?我可以以某种方式在其他地方进行加密,并且仍然将其与结果一起返回吗?也许在一个函数中?我这样做只是为了在安全受到损害的情况下更安全。

所以我的结果将是:

name | encValue
me   | s63gd7dnd8dm
4

1 回答 1

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. 同样的安全问题也适用于视图定义。

于 2013-06-05T12:21:38.940 回答