2012-02-15 2 views
4

첫 번째 도메인 객체를 저장할 때 레일스의 기본 설치에서는 785787634 또는 무엇인가와 같은 fancy randomized id를 제공합니다. Grails는 1을 제공합니다.grails : 무작위화된 id의

grails에서 추측하기 어렵고 교차 가능성이 낮은 자동 생성 ID를 만드는 데 선호되는 방법은 무엇입니까?

+0

순차 자동 생성 ID의 장점은 클러스터 된 인덱스에 대한 삽입의 복잡성을 줄입니다. 무작위 ID를 "더 잘"호출하는 것은 주관적입니다. –

+0

마음에, 당신은 이것을 확인할 수 있습니다 : http://danlynn.com/grails/grails-gorm-and-uuids/ –

+0

UUID가 성능에 영향을 줄 수 있다고 들었습니다. 당신이 그것을 선택하기 전에, 당신은 벤치마킹을 할 수 있습니다. –

답변

5

Grails에서는 ID 생성기를 사용자 정의 할 수 있습니다. 귀하의 경우, 당신이 고려해야 'UUID'또는 'GUID를'

4

제공 한 기본 ID를 사용하는 것이 할 수있는 다른 방법하지만 다음 UUID 때를 사용하여 전용 열을 추가 할 수 있습니다에서 http://grails.org/doc/latest/guide/GORM.html#identity

참조 항목에 공개 (비보안) 액세스가 필요합니다.

class Widget { 
    String uuid 

    static constraints = { 
     uuid unique: true 
    } 

    def beforeInsert() { 
     // optionally, replace the dashes by adding .replaceAll('-','') 
     uuid = UUID.randomUUID().toString() 
    } 
} 

그런 다음 당신이 그렇게 같은 컨트롤러를 사용할 수 있습니다 :

나는이 꽤 잘 작동 생각이 너무 느린하지 그래서 이것은 자동으로 인덱싱

// url: app/public/widget/48b5451a-0d21-4a36-bcc0-88b129852f1b 

PublicController { 
    def widget() { 
     Widget w = Widget.findByUuid(params.id) 
     ... 
    } 
} 

을하고 UUID입니다 위젯을 공개적으로 조회 할 때만 사용됩니다. 로그인 한 사용자가있는 경우 보안 점검을 수행하고 app/widget/edit/1 또는 이와 유사한 것을 사용하면됩니다.

나는 "임의의 숫자"를 어떤 수단으로도 보안에 의존하지 않을 것입니다. 추측 숫자는 숫자가 순차적이지 않은 경우에도 작동합니다. 상대적으로 UUID를 추측하는 것은 불가능합니다. 그러나 로그인 계정이있는 경우 인증 확인이 가장 좋습니다.

+0

저는 교차로에 대해 실제로 보안에 대해 덜 염려합니다. 아마 나는 잘못된 방향으로 나아갈 것입니다. 나는 내가 가지고있는 문제를 격리시키고 새로운 질문을 게시하려고 노력할 것입니다. – Mikey