UUID v2 Üretici

Yerel alan ve kimlikle DCE Security UUID v2 oluşturur

UUID oluşturmak için Oluştur'a tıklayın
Not:UUID v2, yerel etki alanı ve kimliği UUID yapısına kodlar
Note:UUID v2, DCE Security bağlamları için tanımlanmış eski bir biçimdir. Modern uygulamalarda nadiren gereklidir. Genel amaçlı benzersiz ID'ler için UUID v4 önerilir.

UUID v2 Nedir?

UUID v2, Dağıtık Hesaplama Ortamı (DCE) spesifikasyonunun bir parçası olarak standartlaştırılan ve RFC 4122'de başvurulan DCE Security UUID sürümüdür. UUID v1'i, zaman damgası alanına POSIX kullanıcı veya grup tanımlayıcısı (UID/GID) gömerek genişletir.

Yapı UUID v1'e benzer, ancak 32 bitlik time_low alanı 32 bitlik yerel tanımlayıcıyla (ör. POSIX UID) değiştirilmiştir.

UUID v2, modern yazılımda son derece nadirdir. Çoğu geliştirici hiçbir zaman bir tane oluşturmaya ihtiyaç duymaz.

UUID v2 Yapısı

UUID v2, diğer UUID sürümleriyle aynı 128 bit, tireli biçime sahiptir. Alanlar UUID v1'den şu şekilde farklıdır:

AlanBitAmaç
local_id32<code>local_id</code> — 32 bitlik yerel alan tanımlayıcısı (ör. <code>/etc/passwd</code>'den POSIX UID), UUID v1'in time_low alanının yerini alır
time_mid16<code>time_mid</code> — kısaltılmış UUID v1 zaman damgasının orta 16 biti
time_hi+version16<code>time_hi_and_version</code> — sürüm nibble'ı <code>2</code> olarak ayarlanmış üst 12 zaman damgası biti
variant+clock_hi8<code>clock_seq_hi_and_reserved</code> — varyant bitleri artı saat dizisinin yüksek kısmı
local_domain8<code>local_domain</code> — alan tanımlayıcısı: <code>0</code> = POSIX Kullanıcı (UID), <code>1</code> = POSIX Grup (GID), <code>2</code> = Organizasyon
node48<code>node</code> — oluşturan ana bilgisayarın 48 bitlik MAC adresi

Örnek: 000003e8-92e0-21ef-8000-325096b39f47 — local_id 0x000003e8 = UID 1000, local_domain 0x00 = POSIX Kullanıcı

Note:local_id alanı zaman damgasını 60 bitten 28 bite düşürür ve hassasiyeti yaklaşık 7,2 dakikaya indirger.

Yerel Alan Değerleri

local_domain baytı, UUID'ye gömülü yerel tanımlayıcının türünü belirtir:

0POSIX_UID
POSIX Kullanıcı ID'si — <code>/etc/passwd</code>'dan sayısal UID, <code>os.getuid()</code> ile elde edilebilir
1POSIX_GID
POSIX Grup ID'si — <code>/etc/group</code>'tan sayısal GID, <code>os.getgid()</code> ile elde edilebilir
2ORG
Organizasyon — özel 32 bitlik organizasyonel tanımlayıcı; semantikler uygulamaya özgüdür

Alan değerleri DCE spesifikasyonu tarafından tanımlanır. 3–255 arası değerler ayrılmıştır.

UUID v2 Neden Nadiren Kullanılır

Üç özellik UUID v2'yi çoğu modern uygulama için pratik dışı kılar:

Kaba Zaman Damgası Çözünürlüğü

Zaman damgası 28 bite kısaltılır (yaklaşık 7,2 dakikalık parçalama).

Standart Kitaplık Desteği Yok

UUID v1 ve v4'ün aksine UUID v2, çoğu UUID kitaplığı tarafından desteklenmez.

POSIX'e Özgü Semantikler

Yerel alan kavramı (UID/GID) doğası gereği POSIX'e özgüdür ve Windows, gömülü sistemler veya bulut ortamlarına anlamlı biçimde taşınmaz.

Warning:Yeni projeler için UUID v2 kullanmayın. Eski bir sistemde UUID v2 ile karşılaştıysanız alanlarını çözmek için bu aracı kullanın. Yeni geliştirme için UUID v4 kullanın.

Tarihsel Bağlam

UUID v2, Open Software Foundation'ın Dağıtık Hesaplama Ortamı (DCE/RPC) kapsamında 1990'ların başında tanımlandı.

DCE güvenlik modeli, her düğümün paylaşılan bir UID/GID ad alanına katıldığı homojen bir POSIX ortamını varsayıyordu.

  • İnternet, homojen POSIX ortamlarından heterojen bulut mimarilerine geçti
  • Modern kimlik doğrulama, tanımlayıcılardaki gömülü UID'ler yerine token'lar (JWT, OAuth) kullanır
  • UUID v4 (tamamen rastgele) ve UUID v7 (zaman sıralı), benzersiz tanımlayıcıların pratik kullanım durumlarını karşılar
  • DCE/RPC'nin kendisi yaygın kullanımdan çıktı

RFC 4122 (2005), UUID v2'yi DCE spesifikasyonuna atıfla dahil etti ancak ayrıntılı oluşturma algoritmasını kasıtlı olarak atladı.

RFC 9562 (2024), UUID v2'yi tarihsel bütünlük için korudu.

UUID v2 ile UUID v1 Karşılaştırması

UUID v2, UUID v1'den türetilmiştir. Karşılaştırma:

KonuUUID v1UUID v2
Zaman damgası bitleri60 bit (~100 ns hassasiyet)28 bit (~7,2 dakika hassasiyet)
Yerel tanımlayıcıYok32 bit POSIX UID/GID
Yerel alanMevcut değil0=UID, 1=GID, 2=Org
Düğüm alanıMAC adresiMAC adresi
Kitaplık desteğiYaygın olarak desteklenirNadiren desteklenir
StandartRFC 4122 / RFC 9562DCE spesifikasyonu (RFC 4122 tarafından başvurulan)
Pratik kullanımEski zaman sıralı ID'ler (Cassandra)Yalnızca DCE Security bağlamları

UUID v2, genel amaçlı kullanım için UUID v1'e göre hiçbir avantaj sunmaz. Yeni geliştirme için UUID v2'yi seçmenin hiçbir nedeni yoktur.

Kod Örnekleri

UUID v2'nin standart kitaplıklarda yerel desteği yoktur:

Python — manuel uygulama

Python
import uuid, struct, time

def uuid_v2(local_id: int, local_domain: int = 0) -> str:
    """
    Generate a DCE Security UUID (v2).
    local_domain: 0 = POSIX UID, 1 = POSIX GID, 2 = Org
    local_id: 32-bit unsigned integer (e.g. os.getuid())
    """
    # Get a v1 UUID for the time and node fields
    v1 = uuid.uuid1()
    fields = list(v1.fields)  # [time_low, time_mid, time_hi_version, clock_seq_hi_variant, clock_seq_low, node]

    # Replace time_low with local_id
    fields[0] = local_id & 0xFFFFFFFF

    # Replace version nibble: clear lower 12 bits of time_hi, set version 2
    fields[2] = (fields[2] & 0x0FFF) | 0x2000

    # Replace clock_seq_low with local_domain
    fields[4] = local_domain & 0xFF

    return str(uuid.UUID(fields=tuple(fields)))


import os
print(uuid_v2(os.getuid(), local_domain=0))   # POSIX UID
print(uuid_v2(os.getgid(), local_domain=1))   # POSIX GID

Go — not

Go
// The standard "github.com/google/uuid" package does NOT support v2.
// You would need to implement it manually, similar to the Python example above.
// Most Go developers use v4 or v7 for new projects.
import "github.com/google/uuid"

v4 := uuid.New()          // v4 — recommended for most use cases
v7, _ := uuid.NewV7()     // v7 — time-ordered, ideal for database primary keys

JavaScript — alanları ayıklama

Mevcut bir UUID v2 dizesinden local_id ve alan çıkarmak için:

JavaScript
// Extracting fields from a UUID v2 string
const uuidStr = '000003e8-1234-2abc-8200-a1b2c3d4e5f6'
//               ^^^^^^^^ ^^^^ ^    ^^
//               local_id      ver  variant+clockSeqHi
//                                  ^^ = local_domain (00 = POSIX UID)

const parts = uuidStr.split('-')

const localId     = parseInt(parts[0], 16)       // → 1000 (0x3e8)
const version     = parseInt(parts[2][0], 16)    // → 2
const localDomain = parseInt(parts[3].slice(2), 16) // low byte of octet pair

const DOMAIN_NAMES = ['POSIX UID', 'POSIX GID', 'Org']
console.log(`Local ID: ${localId}`)                       // Local ID: 1000
console.log(`Version:  ${version}`)                       // Version:  2
console.log(`Domain:   ${DOMAIN_NAMES[localDomain]}`)     // Domain:   POSIX UID
Note:google/uuid Go paketi, birkaç ana akım kitaplıktan biri olarak uuid.NewDCEGroup() ve uuid.NewDCEPerson() aracılığıyla UUID v2 oluşturmayı destekler.

Sıkça Sorulan Sorular

JavaScript'te UUID v2 oluşturabilir miyim?
Hiçbir standart kitaplık JavaScript'te UUID v2 oluşturmayı desteklemez. Baytları manuel olarak oluşturmanız gerekir.
local_id alanı ne içerir?
local_id, anlamı local_domain baytına bağlı olan 32 bitlik işaretsiz bir tam sayıdır. Alan 0 için, süreci çalıştıran kullanıcının POSIX UID'sidir.
UUID v2'deki zaman damgası güvenilir mi?
Yalnızca kaba bir gösterge olarak. Yalnızca 28 bit korunduğundan etkin hassasiyet yaklaşık 7,2 dakikadır.
Hangi sistemler hâlâ UUID v2 kullanıyor?
UUID v2, öncelikle 1990'lardan kalma eski DCE/RPC sistemlerinde karşılaşılır. Modern sistemler neredeyse evrensel olarak UUID v4 veya v7 kullanır.
RFC 4122 neden UUID v2 algoritmasını içermiyor?
RFC 4122, UUID v2 oluşturma algoritmasının IETF tarafından değil DCE spesifikasyonu tarafından tanımlandığını açıkça belirtir.
UUID v2 ile GUID aynı mı?
Hayır. GUID, Microsoft'un UUID standardı uygulamasının adıdır. Microsoft COM dahili olarak UUID v1 ve v4 GUID'leri kullanır. UUID v2, Windows GUID altyapısı tarafından kullanılmaz.