문제

Grails 도메인 객체에서 PAGED 데이터를 표시하려고합니다. 예를 들어 : 나는 일시적 인 속성의 첫 이름과 마지막 이름을 가진 도메인 객체 직원이 있으며, 세터/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)       
}

}

도움이 되었습니까?

해결책

Gorm/Hibernate 기준이 실행되는 방식으로 인해 작동 할 수 없습니다. 이러한 주문 지시문은 SQL로 변환되며 데이터베이스 계층에서 발생하기 때문에 비은성 필드에서만 작동 할 수 있습니다.

귀하의 선택은 다음과 같습니다.

  1. 쿼리 결과를 메모리에로드하고 암호화되지 않은 값으로 스스로 정렬 및 페이지를 수행하십시오.
  2. 데이터베이스의 암호화 기능과 사용자 정의 쿼리를 사용하십시오 (예 :select * from employee order by AES_DECRYPT(lastName, key)"). 이렇게하면 데이터베이스에 많은 추가 부하가 있습니다.
  3. 정렬에 사용할 수있는 암호화되지 않은 형태로 무언가를 저장하십시오. 예 : 마지막 이름의 처음 몇 글자. 그러나 이것은 안전을 유지하려는 정보의 일부를 누출합니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top