我想做
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
答案 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
。相同的安全问题适用于视图定义。