[sql-server] GUID 충돌이 가능합니까?

SQL Server 2000에서 연결된 응용 프로그램을 사용하는 각 사용자에 대해 GUID를 사용하는 데이터베이스에서 작업하고 있습니다. 어쨌든 두 명의 사용자가 동일한 GUID를 사용했습니다. Microsoft는 알고리즘을 사용하여 콜리 전을 유발할 가능성이 극히 적은 임의의 GUID를 생성하지만 충돌은 여전히 ​​가능하다는 것을 알고 있습니다.



답변

기본적으로 누군가 당신의 데이터베이스를 다루는 것 같습니다. 버전 GUID에 따라 값을 사용하는 것이 고유하거나 (버전 1 GUID와 같은 것) 고유하거나 예측할 수없는 것 (버전 4 GUID와 같은 것)입니다. NEWID () 함수에 대한 SQL Server의 구현은 128 비트 난수를 사용하는 것으로 보이므로 충돌이 발생하지 않습니다.

충돌 가능성이 1 %이면 약 2,600,000,000,000,000,000 GUID 를 생성해야합니다 .


답변

기본적으로 그들은 불가능합니다! 천문학적으로 가능성은 낮다 .

하지만 … 나는 내가 알고있는 세계에서 유일하게 GUID가 한 번만있는 사람 입니다.

그리고 나는 그것을 확신하고 실수가 아니라고 확신합니다.

Pocket PC에서 실행되는 작은 응용 프로그램에서는 작업이 끝날 때 GUID가 생성 된 명령을 실행해야했습니다. 서버에서 실행 된 명령은 실행 날짜와 함께 서버의 명령 테이블에 저장되었습니다. 어느 날 디버깅 할 때 모듈 명령 (새로 생성 된 GUID가 첨부 된)을 발행했지만 아무 일도 일어나지 않았습니다. 작업을 시작할 때 guid가 한 번만 생성되었으므로 동일한 guid로 다시 수행했으며 명령이 실행되지 않는 이유를 찾으려고 아무것도하지 않았습니다. 명령 테이블을 확인했습니다. 현재 GUID와 동일한 GUID가 3 주 전에 삽입되었습니다. 이것을 믿지 않고 2 주 백업에서 데이터베이스를 복원했으며 guid가있었습니다. 코드를 확인하면 새로운 guid가 의심의 여지없이 새로 생성되었습니다.

편집 :이 발생 가능성을 크게 높일 수있는 몇 가지 요소가 있으며 응용 프로그램이 PocketPC 에뮬레이터에서 실행 중이며 에뮬레이터에 상태 저장 기능이있어 상태가 복원 될 때마다 현지 시간도 복원됩니다. guid는 내부 타이머를 기반으로합니다 …. 또한 컴팩트 프레임 워크를위한 guid 생성 알고리즘은 COM보다 덜 완벽 할 수 있습니다.


답변

그것들은 이론적으로는 가능하지만 3.4E38의 가능한 숫자로 1 년에 수십 조의 GUID를 생성하면 한 번의 복제 가능성은 0.00000000006 ( Source )입니다.

두 명의 사용자가 동일한 GUID를 사용하면 프로그램에 데이터가 복사되거나 공유되는 버그가 있다고 생각합니다.


답변

먼저 두 GUID의 충돌 가능성을 살펴 보겠습니다. 다른 답변에서 언급했듯이 생일 역설 때문에 2 ^ 128 (10 ^ 38)의 1은 아닙니다. 즉, 두 GUID가 충돌 할 확률이 2 ^ 64 (10 ^ 19) 이것은 훨씬 작습니다. 그러나 이것은 여전히 ​​매우 많으며 합리적인 수의 GUID를 사용한다고 가정 할 때 충돌 확률이 낮습니다.

또한 많은 사람들이 생각하는 것처럼 GUID에는 타임 스탬프 또는 MAC 주소가 포함되어 있지 않습니다. 이것은 v1 GUID에 해당되었지만 이제는 의사 난수 인 v4 GUID가 사용되는데, 이는 더 이상 시간과 기계에 고유하지 않기 때문에 충돌 가능성이 더 높음을 의미합니다.

따라서 본질적으로 대답은 그렇습니다. 충돌이 가능합니다. 그러나 그들은 가능성이 거의 없습니다.

편집 : 2 ^ 64로 고정


답변

두 개의 임의 GUID 충돌 가능성 (10 ^ 38에서 ~ 1)은 손상된 TCP / IP 패킷을 감지하지 못할 확률보다 낮습니다 (10 ^ 10에서 ~ 1). http://wwwse.inf.tu-dresden.de/data/courses/SE1/SE1-2004-lec12.pdf , 11 페이지 이것은 디스크 드라이브, CD 드라이브 등에도 적용됩니다.

GUID는 통계적으로 고유하며 db에서 읽은 데이터는 통계적으로 만 정확합니다.


답변

나는 고려할 것 오캄의 면도날 이 경우에 좋은 가이드로. GUID 충돌이 발생할 가능성은 거의 없습니다. 버그가 있거나 데이터를 엉망으로 만드는 사람이 훨씬 많습니다.


답변

Wikipedia의 글로벌 고유 식별자 (Globally Unique Identifier) 기사를 참조하십시오. GUID를 생성하는 방법에는 여러 가지가 있습니다. 분명히 오래된 (?) 방식은 Mac 주소, 매우 짧은 단위의 타임 스탬프 및 고유 한 카운터 (동일한 컴퓨터에서 빠른 세대를 관리하기 위해)를 사용했기 때문에 복제하는 것은 거의 불가능합니다. 그러나이 GUID는 사용자를 추적하는 데 사용될 수 있기 때문에 삭제되었습니다 …

Microsoft에서 사용하는 새로운 알고리즘에 대해 잘 모르겠습니다 (이 기사에서는 GUID 시퀀스를 예측할 수 있다고 말하지만 더 이상 타임 스탬프를 사용하지 않는 것 같습니다. 위에 링크 된 Microsoft 기사에 다른 내용이 나와 있습니다 …).

이제 GUID는 이름이 전 세계적으로 고유하도록 신중하게 설계되었으므로 불가능하거나 매우 낮은 확률로 위험에 처할 것입니다. 나는 다른 곳을 볼 것이다.