Идентификатор объекта
Идентификатор объекта (также объектный идентификатор, OID, от англ. Object Identifier) — это уникальный идентификатор, присваиваемый объекту в информационной системе, базе данных или распределённой среде для его однозначного распознавания, адресации и ссылки на него. Идентификатор обеспечивает возможность отличать один объект от другого в рамках заданного пространства имён, независимо от его атрибутов или местоположения.
История
Понятие идентификатора объекта возникло с развитием компьютерных систем и баз данных в 1960–1970-х годах. В ранних файловых системах и иерархических базах данных (например, IMS от IBM) для ссылок на записи использовались физические адреса на диске, что было ненадёжно при реорганизации данных. Переход к реляционной модели данных, предложенной Эдгаром Коддом в 1970 году, потребовал логических, а не физических способов идентификации. В реляционных базах данных роль идентификатора объекта стала выполнять первичный ключ (primary key) — уникальное значение, присваиваемое каждой строке таблицы.
В 1980-х годах с развитием объектно-ориентированного программирования и объектно-ориентированных баз данных (например, GemStone, ObjectStore) появилась потребность в идентификаторах, которые были бы независимы от содержимого объекта и не менялись при его перемещении в памяти или на диске. Такие идентификаторы стали называть OID (Object Identifier) в контексте объектных систем.
Параллельно в 1988 году Международная организация по стандартизации (ISO) и Международная электротехническая комиссия (IEC) приняли стандарт ISO/IEC 8824 (ASN.1), который определил иерархическую систему глобальных идентификаторов объектов (OID) для использования в протоколах передачи данных, в частности в SNMP (Simple Network Management Protocol) и X.500. Эта система OID представляет собой древовидную структуру, где каждый узел имеет числовой код, а полный идентификатор — это последовательность чисел, разделённых точками (например, 1.3.6.1.2.1.1.1.0).
В 1990-х годах с распространением веб-технологий и XML (Extensible Markup Language) возникла потребность в универсальных идентификаторах ресурсов (URI) и, в частности, в URN (Uniform Resource Name), которые могут выступать в роли постоянных идентификаторов объектов. В 1998 году был предложен стандарт OID-URN (RFC 3061), позволяющий представлять OID в виде URN (например, urn:oid:1.3.6.1.2.1.1.1.0).
В России развитие систем идентификации объектов связано с внедрением государственных информационных систем, таких как Единая система идентификации и аутентификации (ЕСИА), Единый государственный реестр записей актов гражданского состояния (ЕГР ЗАГС), а также с системами управления базами данных (СУБД) отечественного производства, например, «Линтер», «Postgres Pro» и «Ред База Данных».
Классификация
Идентификаторы объектов можно классифицировать по нескольким признакам.
По области действия
- Локальные идентификаторы — действуют в пределах одной системы, базы данных или приложения. Примеры: идентификатор записи в таблице (ID), номер строки в Excel, идентификатор процесса в операционной системе (PID).
- Глобальные идентификаторы — уникальны в масштабах всего мира или распределённой сети. Примеры: OID по стандарту ISO/IEC 8824, UUID (Universally Unique Identifier), DOI (Digital Object Identifier), ISBN (International Standard Book Number), ИНН (идентификационный номер налогоплательщика) в России.
По способу генерации
- Последовательные (автоинкрементные) — генерируются автоматически системой с увеличением на единицу (или другой шаг) при создании нового объекта. Используются в реляционных базах данных (например, SERIAL в PostgreSQL, AUTO_INCREMENT в MySQL).
- Случайные (вероятностные) — генерируются на основе случайных чисел с высокой вероятностью уникальности. Пример: UUID версии 4 (RFC 4122).
- Содержательные (семантические) — идентификатор несёт смысловую нагрузку, например, код страны, регион, год. Пример: ИНН в России (первые две цифры — код региона, следующие две — код налоговой инспекции, затем порядковый номер и контрольное число).
- Хеш-функции — идентификатор вычисляется как хеш от содержимого объекта (например, SHA-1, MD5). Используются в системах контроля версий (Git — идентификатор коммита) и в распределённых файловых системах (IPFS).
По типу носителя
- Цифровые — числовые последовательности (например, 12345, 1.3.6.1.2.1.1.1.0).
- Строковые — буквенно-цифровые коды (например, «A1B2C3», «urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6»).
- Бинарные — представлены в виде последовательности байтов, часто используются в низкоуровневых протоколах.
Устройство и характеристики
Структура OID по стандарту ISO/IEC 8824
OID представляет собой последовательность целых неотрицательных чисел, разделённых точками. Корневая иерархия включает три узла:
- 0 — ITU-T (Международный союз электросвязи);
- 1 — ISO (Международная организация по стандартизации);
- 2 — совместное использование ITU-T и ISO.
Пример: OID 1.3.6.1.2.1.1.1.0 расшифровывается как:
- 1 — ISO;
- 3 — организация, зарегистрированная в ISO (в данном случае — DoD, Министерство обороны США);
- 6 — Internet (поддерево для интернет-протоколов);
- 1 — IETF (Internet Engineering Task Force);
- 2 — Management (управление);
- 1 — MIB (Management Information Base);
- 1 — System (системная группа);
- 1 — sysDescr (описание системы);
- 0 — экземпляр объекта.
Структура UUID (RFC 4122)
UUID — это 128-битное число, обычно представляемое в виде 32 шестнадцатеричных цифр, разделённых дефисами в формате 8-4-4-4-12 (например, 550e8400-e29b-41d4-a716-446655440000). UUID содержит поля:
- time_low (4 байта) — младшие 32 бита времени;
- time_mid (2 байта) — средние 16 бит времени;
- time_hi_and_version (2 байта) — старшие 16 бит времени и версия UUID;
- clock_seq_hi_and_reserved (1 байт) — старшие биты последовательности часов и зарезервированные биты;
- clock_seq_low (1 байт) — младшие 8 бит последовательности часов;
- node (6 байт) — MAC-адрес узла (для версии 1) или случайное число (для версии 4).
Требования к идентификаторам
- Уникальность — в пределах заданного пространства имён не должно быть двух одинаковых идентификаторов.
- Неизменность — идентификатор не должен меняться в течение всего жизненного цикла объекта.
- Компактность — для эффективного хранения и передачи.
- Устойчивость к коллизиям — особенно для случайных и хеш-идентификаторов.
- Возможность проверки — например, контрольная сумма в ИНН или ISBN.
Применение
В базах данных
В реляционных базах данных идентификатор объекта (первичный ключ) используется для однозначной идентификации строки таблицы, обеспечения ссылочной целостности (через внешние ключи) и ускорения поиска (через индексы). В объектно-реляционных СУБД (например, PostgreSQL) существует специальный тип данных OID, который может использоваться для ссылок на системные объекты (таблицы, функции, типы).
В сетевых протоколах
В протоколах SNMP (Simple Network Management Protocol) и LDAP (Lightweight Directory Access Protocol) OID используются для идентификации управляемых объектов, таких как параметры сетевых устройств (маршрутизаторов, коммутаторов), атрибуты записей в каталогах (например, имя пользователя, пароль, адрес электронной почты).
В цифровых сертификатах и криптографии
В инфраструктуре открытых ключей (PKI) OID используются для идентификации алгоритмов шифрования, типов сертификатов, политик сертификации. Например, OID 1.2.840.113549.1.1.5 обозначает алгоритм подписи SHA-1 с RSA.
В издательском деле и науке
DOI (Digital Object Identifier) — это система постоянных идентификаторов для цифровых объектов (статей, книг, данных). DOI присваивается через реестр, управляемый International DOI Foundation. В России DOI активно используется в научных журналах, входящих в Российский индекс научного цитирования (РИНЦ).
В государственных информационных системах России
В России идентификаторы объектов широко применяются в государственных информационных системах:
- СНИЛС (страховой номер индивидуального лицевого счёта) — идентификатор гражданина в системе персонифицированного учёта Пенсионного фонда России (Социальный фонд России).
- ИНН (идентификационный номер налогоплательщика) — идентификатор физического или юридического лица в налоговой системе.
- ОГРН (основной государственный регистрационный номер) — идентификатор записи о создании юридического лица в Едином государственном реестре юридических лиц (ЕГРЮЛ).
- КПП (код причины постановки на учёт) — идентификатор, дополняющий ИНН для организаций.
В веб-технологиях
В веб-фреймворках и API (REST, GraphQL) идентификаторы объектов используются для адресации ресурсов. Например, в RESTful API идентификатор объекта может быть частью URL (например, /api/users/123). В GraphQL идентификатор объекта часто реализуется через интерфейс Node с полем id.
Примеры
- UUID версии 4: 550e8400-e29b-41d4-a716-446655440000 — используется для идентификации сессий, пользователей, заказов в веб-приложениях.
- OID для SNMP: 1.3.6.1.2.1.1.1.0 — идентификатор системного описания устройства (sysDescr).
- DOI: 10.1000/182 — идентификатор книги «The DOI Handbook».
- ISBN-13: 978-5-17-123456-7 — идентификатор книги, изданной в России.
- ИНН физического лица: 123456789012 — 12-значный номер, присваиваемый налоговой службой.
- Идентификатор процесса в Linux: 12345 — PID, присваиваемый ядром операционной системы.
Критика и ограничения
- Проблема коллизий — для случайных идентификаторов (UUID версии 4) теоретически возможны коллизии, хотя вероятность крайне мала (порядка 2^-122). Для критически важных систем (например, ядерных реакторов, финансовых транзакций) рекомендуется использовать гарантированно уникальные идентификаторы.
- Семантическая нагрузка — содержательные идентификаторы (например, ИНН с кодом региона) могут раскрывать информацию об объекте, что может быть нежелательно с точки зрения конфиденциальности.
- Изменяемость — некоторые идентификаторы могут меняться при изменении атрибутов объекта (например, переезд организации может изменить КПП). Это нарушает принцип неизменности.
- Управление пространством имён — для глобальных идентификаторов (OID, DOI) требуется централизованный реестр, что создаёт административные и финансовые издержки.
- Совместимость — разные системы могут использовать разные форматы идентификаторов, что затрудняет интеграцию. Например, UUID в формате 8-4-4-4-12 несовместим с OID в формате чисел, разделённых точками.
Источники
- ISO/IEC 8824-1:2021 «Information technology — Abstract Syntax Notation One (ASN.1) — Part 1: Specification of basic notation»
- RFC 4122 «A Universally Unique IDentifier (UUID) URN Namespace»
- RFC 3061 «A URN Namespace of Object Identifiers»
- Кодд, Э. Ф. «A Relational Model of Data for Large Shared Data Banks» (1970)
- Документация PostgreSQL: «Object Identifier Types»
- Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных» (в части идентификации граждан)
- Постановление Правительства РФ от 08.09.2010 № 697 «О единой системе идентификации и аутентификации в инфраструктуре, обеспечивающей информационно-технологическое взаимодействие информационных систем, используемых для предоставления государственных и муниципальных услуг в электронной форме»
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →