У меня есть несколько таблиц с зашифрованными полями. Просмотрев документы MySQL, я обнаружил, что вы не можете создать собственный тип данных для шифрования/дешифрования, что было бы идеальным. Таким образом, вместо того, у меня есть вид, аналогичный приведенному ниже:MySQL - Работа с зашифрованными столбцами
CREATE VIEW EMPLOYEE AS
SELECT ID, FIRST_NAME, LAST_NAME, SUPER_SECURE_DECRYPT(SSN) AS SSN
FROM EMPLOYEE_ENCRYPTED
Опять же, после прочтения документации MySQL
, я узнал, что точка зрения не является вставной, поскольку он имеет производный столбец и номер социального страхования поле не обновляется, поскольку это производный столбец, что имеет смысл. Однако вы не можете добавить триггер в представление, поэтому запись в представление на самом деле не является вариантом.
В попытке обойти это, я создал пару триггеров похож на:
CREATE TRIGGER EMPLOYEE_ENCRYPTED_UPDATE
BEFORE UPDATE ON EMPLOYEE_ENCRYPTED FOR EACH ROW
BEGIN
IF NEW.SSN <> OLD.SSN THEN
SET NEW.SSN = SUPER_SECURE_ENCRYPT(NEW.SSN);
END IF;
END;
, а также один для вставки (что, так как это так похоже, я не собираюсь опубликуйте его). Это просто означает, что я должен читать из представления и писать в таблицу.
Это приличная решение за исключением, что, когда вы указываете пункт where
для обновления заявление, что запрашивает зашифрованный столбец (как в обновлении сотрудника по их ССН). Как правило, это не проблема, поскольку я обычно использую первичный ключ для обновлений, но мне нужно знать для других зашифрованных полей, если есть способ сделать это.
Я хочу сделать MySQL
сделать тяжелый подъем для шифрования и дешифрования, чтобы он мог быть как можно более трением работать с разработчиком. Я хотел бы, чтобы разработчик приложений не должен был беспокоиться о зашифрованных полях как можно больше, все еще используя зашифрованные поля, это конечная цель здесь. Любая помощь или совет приветствуются.