2016-11-18 4 views
0

я использовал 2 таблица.Связать имя метода с mysql where clause?

table1: Employees стол У меня есть две колонки идентификатор, employees_id (Тип: Long)

table2: Salary стол я две колонки идентификатор, employees_encrpted_id (Тип: String)

Примечание: 1. Общее поле для двух таблиц: employees_id в Employees таблице (Здесь мы храним в сотрудниках ид) и employees_encrpted_id в Salary таблице (мы используем метод шифрования для шифрования сотрудников идентификатор затем сохранить его)

2. Я расшифрован метод (имя decrypt). Этот метод можно связать с запросом mysql. Я попытался как этот

"выберите * от сотрудников как эми, зарплата, как S, где emp.employees_id = CAST (" + decrypt ("s.employees_encrpted_id") + "AS UNSIGNED)"

но бросает error "[MySQLSyntaxErrorException: у вас возникла ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования вблизи ')' в строке 1]«

+0

Предполагая, что вы этого не сделаете, было бы намного проще (просто) зашифровать (вероятно, включая идентификатор в кодовую фразу, чтобы не допустить, чтобы две одинаковые зарплаты выглядели одинаково). И на самом деле это намного безопаснее, потому что часто можно заключить из другой информации, какой идентификатор он может (или не может), например.если таблица содержит историю, дата первой записи соответствует дате присоединения к фирме, рекламные акции соответствуют рейсам, количество записей, вероятно, относится к периоду занятости в фирме, самая высокая зарплата, вероятно, принадлежит боссу (или дБА), ... – Solarflare

ответ

0

, если вам нужно обрабатывать зашифрованный идентификатор столбцов, у вас есть следующие возможности:

1) загрузить таблицы которые ссылаются в память (из вашей БД, в ваше приложение), затем дешифруют, а затем присоединяются ... очевидно, это имеет небольшой недостаток: вы не можете использовать свою СУБД для соединения, или для группировок, или для агрегации , и т. д., если указанные вещи полагаются на зашифрованный столбец, который будет доступен в дешифрованной форме

2) загрузить первую таблицу, ENCRYPT идентификаторы и создать временную таблицу, содержащую первую таблицу с зашифрованными идентификаторами, выполнить запрос по temp table + другие таблицы с зашифрованными идентификаторами и отбрасывать временную таблицу ... очевидно, опять-таки есть небольшой недостаток: ваша СУБД получает знания о том, что она не должна знать: связь между зашифрованными и незашифрованными идентификаторами ...

3) реализовать шифрование/дешифрование в качестве хранимой функции, а c все это с ключом каждый раз, когда вы используете отношения ... снова есть недостаток: ваша СУБД должна будет вызвать эту функцию для каждого значения id, чтобы получить дешифрованное/зашифрованное значение, что, вероятно, влияет на производительность, которую вы или ваши пользователи можете в лучшем случае, если вообще, допустите

, в конце концов вы, скорее всего, узнаете, что весь уровень безопасности ваших зашифрованных идентификаторов будет потерян из-за того, что ключ должен быть сохранен на сервере приложений или могут быть перехвачены на стороне СУБД, и вся работа по внедрению зашифрованных столбцов ИД была просто для удовольствия, а не для прибыли