55.8. pg_authid #

В каталоге pg_authid содержится информация об идентификаторах для авторизации (ролях). Роль включает в себя концепции «пользователей» и «групп». Пользователь по существу представляет собой частный случай роли, с флагом rolcanlogin. Любая роль (с или без флага rolcanlogin) может включать другие роли в качестве членов; см. pg_auth_members.

Так как в этом каталоге содержатся пароли, он не должен быть открыт для всех. Для общего пользования предназначено представление pg_roles на базе pg_authid, в котором поле пароля очищено.

За подробной информацией о пользователях и управлении правами обратитесь к Главе 21.

Так как пользователи определяются глобально, каталог pg_authid разделяется всеми базами данных кластера; есть только единственная копия pg_authid в кластере, а не отдельные в каждой базе данных.

Таблица 55.8. Столбцы pg_authid

Тип столбца

Описание

oid oid

Идентификатор строки

rolname name

Имя роли

rolsuper bool

Роли имеет права суперпользователя

rolinherit bool

Роль автоматически наследует права ролей, в которые она включена

rolcreaterole bool

Роль может создавать другие роли

rolcreatedb bool

Роль может создавать базы данных

rolcanlogin bool

Роль может подключаться к серверу. То есть эта роль может быть указана в качестве начального идентификатора авторизации сеанса.

rolreplication bool

Роль является ролью репликации. Такие роли могут устанавливать соединения для репликации и создавать/удалять слоты репликации.

rolbypassrls bool

Роль не подчиняется никаким политикам защиты на уровне строк; за подробностями обратитесь к Разделу 5.9.

rolconnlimit int4

Для ролей, которые могут подключаться к серверу, это значение задаёт максимально разрешённое для этой роли число одновременных подключений. При значении -1 ограничения нет.

rolprofile regprofile (ссылается на pg_profile.oid)

OID профиля пользователя

rolloginattempts int4

Число следующих подряд неудачных попыток входа пользователя. Это число равно 0, если параметр FAILED_LOGIN_ATTEMPTS соответствующего профиля равен UNLIMITED (см. CREATE PROFILE). После успешного входа значение rolloginattempts также сбрасывается в 0.

rollastlogin timestamptz

Время последнего подключения пользователя роли. Значение не обновляется, если параметр USER_INACTIVE_TIME соответствующего профиля роли равен UNLIMITED (за подробной информацией обратитесь к CREATE PROFILE).

rolfirstfailedauth timestamptz

Время первой неудачной попытки подключения пользователя роли. Принимает значение -infinity, если параметр USER_INACTIVE_TIME соответствующего профиля роли равен 0 (за подробной информацией обратитесь к CREATE PROFILE). После разблокировки роли значение также сбрасывается в -infinity.

rolstatus int2

Состояние роли: 0 — роль активна, 1 — роль заблокирована вручную (см. параметр ACCOUNT LOCK в ALTER ROLE), 2 — роль заблокирована из-за бездействия (см. параметр USER_INACTIVE_TIME в CREATE PROFILE), 4 — роль заблокирована из-за превышения предельного числа неудачных попыток входа (см. параметр FAILED_LOGIN_ATTEMPTS в CREATE PROFILE)

rolpassword text

Зашифрованный пароль; NULL, если он не задан. Его формат зависит от используемого вида шифрования.

rolvaliduntil timestamptz

Срок действия пароля (используется только при аутентификации по паролю); NULL, если срок действия не ограничен

rolpasssetat timestamptz

Время установления текущего пароля (используется только при аутентификации по паролю); null, если пароль не установлен.


Если пароль зашифрован MD5, значение в rolpassword начинается со строки md5, за которой идёт 32-символьный шестнадцатеричный хеш MD5. Этот хеш вычисляется для пароля пользователя с добавленным за ним его именем. Например, если у пользователя joe пароль xyzzy, Postgres Pro сохранит в этом поле md5-хеш строки xyzzyjoe.

Если пароль зашифрован по алгоритму SCRAM-SHA-256, он имеет формат:

SCRAM-SHA-256$<число итераций>:<соль>$<СохранённыйКлюч>:<КлючСервера>

Здесь соль, СохранённыйКлюч и КлючСервера кодируются в формате Base64. Этот формат соответствует стандарту RFC 5803.

55.8. pg_authid #

The catalog pg_authid contains information about database authorization identifiers (roles). A role subsumes the concepts of users and groups. A user is essentially just a role with the rolcanlogin flag set. Any role (with or without rolcanlogin) can have other roles as members; see pg_auth_members.

Since this catalog contains passwords, it must not be publicly readable. pg_roles is a publicly readable view on pg_authid that blanks out the password field.

Chapter 21 contains detailed information about user and privilege management.

Because user identities are cluster-wide, pg_authid is shared across all databases of a cluster: there is only one copy of pg_authid per cluster, not one per database.

Table 55.8. pg_authid Columns

Column Type

Description

oid oid

Row identifier

rolname name

Role name

rolsuper bool

Role has superuser privileges

rolinherit bool

Role automatically inherits privileges of roles it is a member of

rolcreaterole bool

Role can create more roles

rolcreatedb bool

Role can create databases

rolcanlogin bool

Role can log in. That is, this role can be given as the initial session authorization identifier.

rolreplication bool

Role is a replication role. A replication role can initiate replication connections and create and drop replication slots.

rolbypassrls bool

Role bypasses every row-level security policy, see Section 5.9 for more information.

rolconnlimit int4

For roles that can log in, this sets maximum number of concurrent connections this role can make. -1 means no limit.

rolprofile regprofile (references pg_profile.oid)

The OID of the role's profile

rolloginattempts int4

Number of consecutive failed login attempts of a user. It is always 0 if FAILED_LOGIN_ATTEMPTS value of the corresponding role profile is UNLIMITED (see CREATE PROFILE). After a successful login, rolloginattempts is reset to 0.

rollastlogin timestamptz

The timestamp the role logged in last time. It is not updated if the USER_INACTIVE_TIME value of the corresponding role profile is UNLIMITED (for more information, refer to CREATE PROFILE).

rolfirstfailedauth timestamptz

The timestamp of the role's first authentication failure. It is -infinity if the USER_INACTIVE_TIME value of the corresponding role profile is 0 (for more information, refer to CREATE PROFILE). It is also reset to -infinity once the role is unlocked.

rolstatus int2

Status of the role: 0 for the active role, 1 the role is manually locked (see ACCOUNT LOCK in ALTER ROLE), 2 the role is locked because of inactivity (see parameter USER_INACTIVE_TIME in CREATE PROFILE), 4 the role is locked because the number of consecutive authentication failures has reached the limit (see parameter FAILED_LOGIN_ATTEMPTS in CREATE PROFILE)

rolpassword text

Encrypted password; null if none. The format depends on the form of encryption used.

rolvaliduntil timestamptz

Password expiry time (only used for password authentication); null if no expiration

rolpasssetat timestamptz

Password set time (only used for password authentication); null if password is not set.


For an MD5 encrypted password, rolpassword column will begin with the string md5 followed by a 32-character hexadecimal MD5 hash. The MD5 hash will be of the user's password concatenated to their user name. For example, if user joe has password xyzzy, Postgres Pro will store the md5 hash of xyzzyjoe.

If the password is encrypted with SCRAM-SHA-256, it has the format:

SCRAM-SHA-256$<iteration count>:<salt>$<StoredKey>:<ServerKey>

where salt, StoredKey and ServerKey are in Base64 encoded format. This format is the same as that specified by RFC 5803.

FAQ