F.69. uuid-ossp — генератор UUID #
Модуль uuid-ossp
предоставляет функции для генерирования универсальных уникальных идентификаторов (UUID) по одному из нескольких стандартных алгоритмов. В нём также есть функции, выдающие специальные UUID-константы. Этот модуль необходим только в случае особых требований, которым не удовлетворяет функциональность в ядре Postgres Pro. Встроенные в ядро способы генерирования UUID описаны в Разделе 9.14.
Данный модуль считается «доверенным», то есть его могут устанавливать обычные пользователи, имеющие право CREATE
в текущей базе данных.
F.69.1. Функции uuid-ossp
#
В Таблице F.44 показаны функции, предназначенные для генерации UUID. Четыре алгоритма для генерации UUID, обозначаемые номерами версий 1, 3, 4 и 5, описаны в стандартах ITU-T Rec. X.667, ISO/IEC 9834-8:2005 и RFC 4122. (Алгоритма версии 2 нет.) Каждый из этих алгоритмов предназначен для различных сфер применения.
Таблица F.44. Функции для генерирования UUID
Функция Описание |
---|
Генерирует UUID версии 1. Такой UUID включает в себя MAC-адрес компьютера и текущее время. Заметьте, что UUID такого типа раскрывают «личность» компьютера, создавшего идентификатор, и время этой операции, что может быть неприемлемым для определённых приложений, где важна конфиденциальность. |
Генерирует UUID версии 1, но вместо реального MAC-адреса компьютера используется случайный групповой MAC-адрес. |
Генерирует UUID версии 3 для заданного пространства имён UUID и указанного имени. Пространство имён должно задаваться одной из специальных констант, которые выдаются функциями Например: SELECT uuid_generate_v3(uuid_ns_url(), 'http://www.postgresql.org'); Из параметра name будет получен MD5-хеш, так что из сгенерированного UUID нельзя будет восстановить имя. В генерируемых таким алгоритмом UUID нет элемента случайности или зависимости от окружения, так что они могут быть воспроизведены. |
Генерирует UUID версии 4, который полностью определяется случайными числами. |
Генерирует UUID версии 5, который похож на версию 3, но хеш рассчитывается по алгоритму SHA-1. Версия 5 предпочтительнее версии 3, так как SHA-1 считается более безопасным, чем MD5. |
Таблица F.45. Функции, возвращающие UUID-константы
Функция Описание |
---|
Выдаёт «нулевой» UUID, который не считается действительным UUID. |
Выдаёт константу, обозначающую пространство имён DNS для UUID. |
Выдаёт константу, обозначающую пространство имён URL для UUID. |
Выдаёт константу, обозначающую пространство имён идентификаторов объектов ISO (OID, ISO Object Identifier) для UUID. (Здесь имеются в виду идентификаторы объектов ASN.1, которые никак не связаны с OID, применяемыми в Postgres Pro.) |
Выдаёт константу, обозначающую пространство имён с уникальными именами X.500 для UUID. |
F.69.2. Сборка uuid-ossp
#
В прошлом этот модуль зависел от библиотеки OSSP UUID, что отразилось в его имени. Хотя библиотеку OSSP UUID всё ещё можно найти по адресу http://www.ossp.org/pkg/lib/uuid/, она плохо поддерживается и её становится всё сложнее портировать на новые платформы. Поэтому модуль uuid-ossp
теперь на некоторых платформах можно собирать без библиотеки OSSP. Во FreeBSD и некоторых других ОС на базе BSD подходящие функции формирования UUID включены в системную библиотеку libc
. В Linux, macOS и некоторых других платформах подходящие функции предоставляются библиотекой libuuid
, которая изначально пришла из проекта e2fsprogs
(хотя в современных дистрибутивах Linux она является частью пакета util-linux-ng
). Вызывая configure
, передайте ключ --with-uuid=bsd
, чтобы использовать функции BSD, либо --with-uuid=e2fs
, чтобы использовать libuuid
из e2fsprogs
, либо ключ --with-uuid=ossp
, чтобы использовать библиотеку OSSP UUID. В конкретной системе может быть установлено сразу несколько библиотек, поэтому configure
не выбирает библиотеку автоматически.
F.69.3. Автор #
Питер Эйзентраут <peter_e@gmx.net>
F.42. sslinfo — obtain client SSL information #
The sslinfo
module provides information about the SSL certificate that the current client provided when connecting to PostgreSQL. The module is useless (most functions will return NULL) if the current connection does not use SSL.
Some of the information available through this module can also be obtained using the built-in system view pg_stat_ssl
.
This extension won't build at all unless the installation was configured with --with-ssl=openssl
.
F.42.1. Functions Provided #
-
ssl_is_used() returns boolean
Returns true if current connection to server uses SSL, and false otherwise.
-
ssl_version() returns text
Returns the name of the protocol used for the SSL connection (e.g., TLSv1.0, TLSv1.1, TLSv1.2 or TLSv1.3).
-
ssl_cipher() returns text
Returns the name of the cipher used for the SSL connection (e.g., DHE-RSA-AES256-SHA).
-
ssl_client_cert_present() returns boolean
Returns true if current client has presented a valid SSL client certificate to the server, and false otherwise. (The server might or might not be configured to require a client certificate.)
-
ssl_client_serial() returns numeric
Returns serial number of current client certificate. The combination of certificate serial number and certificate issuer is guaranteed to uniquely identify a certificate (but not its owner — the owner ought to regularly change their keys, and get new certificates from the issuer).
So, if you run your own CA and allow only certificates from this CA to be accepted by the server, the serial number is the most reliable (albeit not very mnemonic) means to identify a user.
-
ssl_client_dn() returns text
Returns the full subject of the current client certificate, converting character data into the current database encoding. It is assumed that if you use non-ASCII characters in the certificate names, your database is able to represent these characters, too. If your database uses the SQL_ASCII encoding, non-ASCII characters in the name will be represented as UTF-8 sequences.
The result looks like
/CN=Somebody /C=Some country/O=Some organization
.-
ssl_issuer_dn() returns text
Returns the full issuer name of the current client certificate, converting character data into the current database encoding. Encoding conversions are handled the same as for
ssl_client_dn
.The combination of the return value of this function with the certificate serial number uniquely identifies the certificate.
This function is really useful only if you have more than one trusted CA certificate in your server's certificate authority file, or if this CA has issued some intermediate certificate authority certificates.
-
ssl_client_dn_field(fieldname text) returns text
This function returns the value of the specified field in the certificate subject, or NULL if the field is not present. Field names are string constants that are converted into ASN1 object identifiers using the OpenSSL object database. The following values are acceptable:
commonName (alias CN) surname (alias SN) name givenName (alias GN) countryName (alias C) localityName (alias L) stateOrProvinceName (alias ST) organizationName (alias O) organizationalUnitName (alias OU) title description initials postalCode streetAddress generationQualifier description dnQualifier x500UniqueIdentifier pseudonym role emailAddress
All of these fields are optional, except
commonName
. It depends entirely on your CA's policy which of them would be included and which wouldn't. The meaning of these fields, however, is strictly defined by the X.500 and X.509 standards, so you cannot just assign arbitrary meaning to them.-
ssl_issuer_field(fieldname text) returns text
Same as
ssl_client_dn_field
, but for the certificate issuer rather than the certificate subject.-
ssl_extension_info() returns setof record
Provide information about extensions of client certificate: extension name, extension value, and if it is a critical extension.
F.42.2. Author #
Victor Wagner <vitus@cryptocom.ru>
, Cryptocom LTD
Dmitry Voronin <carriingfate92@yandex.ru>
E-Mail of Cryptocom OpenSSL development group: <openssl@cryptocom.ru>