2013-08-08 4 views
-1

다음은 시나리오입니다. MongoDB에 엔트리를 저장하고 _id를 표시 할 때 각 엔트리의 공개 식별자로 사용합니다. _id는 추측하기가 매우 어렵 기 때문에 URL의 _id를 기반으로 한 항목에 대한 액세스 권한이있는 사용자는 정보에 따라 다음 또는 이전 항목 (아래 예제 제외)을 추측 할 수 없습니다. 또한 예를 들어 md5 해시 또는 uniqid가 포함 된 다른 필드에 추가 인덱스를 만들 필요가 없습니다.MongoId 생성을 제어 할 수 있습니까?

문제점 : 가져 오기 작업의 일부로 여러 항목을 작성할 때 항목은 부분적으로 시간 소인을 기반으로하기 때문에 매우 유사한 _id를 갖습니다. 가져 오기 중에 작성된 세 개의 항목은 다음과 같습니다. 이 시나리오에서는 52014b1a3c9fb7733d000002

52014b1a3c9fb7733d000000 52014b1a3c9fb7733d000001 , 패턴을보고 각 식별자의 마지막 부분을 편집하려고,이 경우 다른 항목을보기에서 성공할 수있는 사용자.

내 질문 (들) : 가이 항목을 예를 들어 가져 오기로 많은 양을 만들 때 마지막에 만 증가 기능을 사용하지 않도록 문서 작성시 MongoId 생성을 제어 할 수 있습니까? ID의 장치 부분을 변경 하시겠습니까? 그게 끝날 수 있습니까?

최후의 수단은 _id를 항목의 공개 식별자로 사용하지 말고 매우 큰 컬렉션에 추가 색인을 설정하도록하는 것입니다. 나는 거기에 가지 않아도되기를 희망한다.

PHP 기반 응용 프로그램에서 MongoDb를 사용하고 있습니다.

+1

왜 문서를 볼 때 일부 액세스 제어를 구현하지 않는 것이 좋을까요? – Phil

+1

@Phil 그게 추가 색인이 필요하고 그게 내가 피하고 싶습니다. 이 문서는 corrent url을받은 사람들에게 공개되어야합니다. – Henkealg

+1

어떻게이 질문 -1 btw입니까? 부적절한가요? 심하게 공식화 되었습니까? 복제? 나는 혼란 스럽다. 어쨌든 누군가에게 관련 답변이 있기를 바랍니다. 감사. – Henkealg

답변

1

자동 ID 생성은 모든 드라이버가 사용해야하는 설정 알고리즘이므로 변경할 수 없습니다. 당신은 그러나 자신의 아이디어를 직접 만들 수 있지만 각 문서에 대해 그렇게 할 것이다 : 그 형식이 설정되어 당신은 당신이 MongoID의 생성자에 24 개 진수 문자를 통과하는지 확인해야

<?php 
$document = array(
    "_id" => new MongoID("ffb234234...."); 
); 

. 그러나이 작업을 수행하는 경우 둘 이상의 시스템과 프로세스간에 고유성을 보장 할 수 있도록 PID와 해시 (호스트 이름)를 포함시켜야합니다.

+0

감사. 결국 md5 해시를 추가하고이를 공용 식별자로 사용하고 컬렉션의 해당 값에 대한 인덱스를 추가하여 작업 속도를 높였습니다. – Henkealg

관련 문제