Я бы хотел сделать

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
0
jmenezes 5 Июн 2013 в 16:11
1
От каких угроз вы пытаетесь защититься? Почему вы не хотите использовать AES_ENCRYPT()?
 – 
eggyal
5 Июн 2013 в 16:19
Я никогда не говорил, что не хочу использовать aes_encrypt. Я сказал, что не хочу использовать его в sql.
 – 
jmenezes
5 Июн 2013 в 16:32
1
Я в замешательстве ... Почему бы вам просто не зашифровать в своем приложении?
 – 
Denis de Bernardy
5 Июн 2013 в 16:37
Ладно, ладно .. Перефразирую. Почему вы не хотите использовать AES_ENCRYPT() " в SQL "?
 – 
eggyal
5 Июн 2013 в 16:40
Чтобы код был чистым. Мои sqls огромны. Затем идет часть безопасности. Если кто-то добрался до моего кода, они не увидят, как это делается.
 – 
jmenezes
5 Июн 2013 в 16:45

1 ответ

Лучший ответ

Вы можете создать такую ​​функцию:

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. Те же проблемы безопасности относятся к определению представления.

2
RandomSeed 5 Июн 2013 в 16:32
Могу ли я использовать функцию в выражении sql? Скажите: select name, call function() from table. Можно ли что-то подобное сделать?
 – 
jmenezes
5 Июн 2013 в 16:34
Спасибо. Это как раз то, что я искал.
 – 
jmenezes
5 Июн 2013 в 16:56