PostgreSQL10, Pgcrypto, HMAC, как пересчитать данные?
Я должен сделать куки с хешем, созданным с помощью функции HMAC для автоматической аутентификации.
Я искал в интернете, как использовать функцию HMAC, и в соответствии с тем, что я нашел, они делают это так:
SELECT *
FROM APP.USER
WHERE ENCODE( HMAC( USER_ID::TEXT, 'MY_KEY', 'SHA256'), 'HEX) = COOKIE_HASH;
Проблема в том, что Postgres выполняет последовательное сканирование. O (n)
Я хочу знать, есть ли способ получить user_id с ключом, чтобы сделать сканирование индекса.
документация по hmac: https://www.postgresql.org/docs/current/static/pgcrypto.html
Аргументы hmac: hmac (текст данных, текст ключа, текст типа) возвращает байты
Спасибо за ваше время (простите мой английский).
0 ответов
Потому что ваш sql пытается запустить функцию для каждой строки. Вы можете использовать функциональный индекс или сохранить хешированное и закодированное значение в другом столбце.
Функциональный индекс:
CREATE INDEX fxix_user_id ON APP.USER(ENCODE(HMAC( USER_ID::TEXT, 'MY_KEY', 'SHA256'), 'HEX));