Я бы хотел сделать
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
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
. Те же проблемы безопасности относятся к определению представления.
select name, call function() from table
. Можно ли что-то подобное сделать?
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными.
AES_ENCRYPT()
?AES_ENCRYPT()
" в SQL "?