2010-03-12 3 views
3

Я пытаюсь отобразить выгружаемые данные из объекта домена grails. Например: У меня есть объект домена Employee со свойствами firstName и lastName, которые являются временными, и при вызове их методов setter/getter они шифруют/дешифруют данные. Данные сохраняются в базе данных в зашифрованном двоичном формате, поэтому не сортируются по этим полям. И все же опять же, не сортируемые по переходным режимам, как указано в: http://www.grails.org/GSP+Tag+-+sortableColumn.Результаты запроса и заказа базы данных в граале с использованием переходных полей

Так что теперь я пытаюсь найти способ использовать переходные процессы по аналогии с:

Employee.withCriteria(max: 10, offset: 30){ 
    order 'lastName', 'asc' 
    order 'firstName', 'asc' 
} 

Класс:

class Employee { 

byte[] encryptedFirstName 
byte[] encryptedLastName 

static transients = [ 
    'firstName', 
    'lastName' 
] 


String getFirstName(){ 
    decrypt("encryptedFirstName") 
} 

void setFirstName(String item){ 
    encrypt("encryptedFirstName",item)  
} 

String getLastName(){ 
    decrypt("encryptedLastName") 
} 

void setLastName(String item){ 
    encrypt("encryptedLastName",item)  
} 

}

ответ

2

Это может» t из-за того, как выполняются критерии GORM/hibernate. Эти директивы заказа переведены в SQL и могут работать только с непереходными полями, поскольку это происходит на уровне базы данных.

Ваш выбор:

  1. Загрузка результатов запроса в память и сделать сортировку и PAGINATION себя с незашифрованными значениями.
  2. Используйте возможности шифрования вашей базы данных и пользовательский запрос (например, «select * from employee order by AES_DECRYPT(lastName, key)»). Опасайтесь, это добавит большую нагрузку на вашу базу данных.
  3. Храните что-то в незашифрованном виде, которое можно использовать для сортировки. Пример: первые несколько букв lastName. Однако это утечка некоторой информации, которую вы пытаетесь сохранить в безопасности.
+0

Спасибо за список вариантов, они идут по строкам, что я ожидал. Я уверен, как избежать первого, так как он может съесть много памяти приложений. Второй должен работать, если моя база данных (MySQL 5.0) поддерживает AES_DECRYPT, а для последнего - мне очень хотелось бы узнать, есть ли хороший хэширование alghoritm, который сохраняет заказ, но не утечка информации. – Azder

 Смежные вопросы

  • Нет связанных вопросов^_^