$$$USR

Назначение

Системная таблица $$$USR предназначена для хранения информации:

  1. о пользователях БД;

  2. о ролях;

  3. о схемах;

  4. о назначении прав доступа пользователей БД к объектам БД;

  5. о назначении ролей пользователям БД;

  6. о назначении прав доступа пользователей и ролей БД к процедурам БД.

Максимальное количество записей в таблице равно 1024 К (1048576 записей).

Примечание

Число записей в таблице $$$USR может превышать 65535, но идентификаторы пользователей и схем должны лежать в диапазоне от 1 до 65535.

Схема таблицы

Схема записи таблицы $$$USR приведена в таблице 57.

Таблица 57. Схема записи таблицы $$$USR
Имя столбцаТип данныхСодержание

$$$S31

integer

  • для пользователя – идентификатор пользователя, положительное значение RowId записи таблицы;

  • для схемы – идентификатор схемы, положительное значение RowId записи таблицы;

  • для роли – отрицательное значение RowId записи таблицы;

  • для назначения прав доступа пользователей БД к объектам БД – системный идентификатор пользователя БД, для которого описываются права;

  • для назначения ролей пользователям БД – системный идентификатор пользователя БД, которому назначена роль;

  • для назначения прав доступа пользователей и ролей БД к процедурам БД – положительное значение RowId записи таблицы для пользователя и отрицательное значение RowId записи таблицы для роли.

$$$S32

integer

  • для пользователя – всегда ноль;

  • для схемы – всегда ноль;

  • для роли – всегда ноль;

  • для назначения прав доступа пользователей БД к объектам БД – системный идентификатор таблицы или представления (поле S11 таблицы $$$SYSRL), для которого назначаются права доступа;

  • для назначения ролей пользователям БД – системный идентификатор назначенной роли;

  • для назначения PUBLIC роли – ноль;

  • для назначения прав доступа пользователей и ролей БД к процедурам БД – отрицательное значение RowId записи процедуры в таблице $$$PROC.

$$$S33

integer

  • для пользователя – маска привилегий пользователя (таблица 58);

    В первом байте столбца содержатся уровни доступа пользователя (старшие 4 бита – RAL, младшие 4 бита – WAL). Во втором байте находится группа пользователя. Пример: Получить информацию о вхождении пользователей БД в группы и их RAL и WAL метки доступа

    SELECT "$$$S34",
           GETBYTE ("$$$S33",1),
           GETBITS ("$$$S33",0,4,4),
           GETBITS ("$$$S33",0,0,4)
     FROM "LINTER_SYSTEM_USER". "$$$USR"
    WHERE "$$$S32" = 0;

  • для роли – системный идентификатор пользователя БД, создавшего роль;

  • для назначения прав доступа пользователей БД к объектам БД – маска доступа;

  • для назначения ролей пользователям БД – всегда ноль;

  • для назначения прав доступа пользователей и ролей БД к процедурам БД – маска доступа.

$$$S34

char(66)
  • для пользователя – имя пользователя;

  • для роли – имя роли;

  • для схемы – имя схемы;

  • для назначения прав доступа пользователей БД к объектам БД – имя пользователя БД, для которого описываются права;

  • для назначения ролей пользователям БД – заполнено пробелами;

  • для назначения прав доступа пользователей и ролей БД к процедурам БД – имя пользователя или роли БД, для которого(ой) описываются права.

$$$S35

byte(240)

Для пользователя – описание полномочий пользователя (таблица 59); для остальных типов записей – 18 пробелов, остальные байты – нули.


Отличительная особенность записи о пользователе: $$$S31  > 0, $$$S32 = 0.

Отличительная особенность записи о роли: $$$S31 <  0, $$$S32 = 0.

Отличительная особенность назначения прав доступа пользователей БД к объектам БД: $$$S31  > 0, $$$S32  > 0.

Отличительная особенность назначения ролей пользователям БД: $$$S31  > 0 ($$$S31 = 0 для PUBLIC), $$$S32 <  0, $$$S33 = 0.

Отличительная особенность назначения прав доступа пользователей и ролей БД к процедурам БД: $$$S31  > 0 для пользователей, $$$S31 <  0 для ролей и $$$S31 = 0 для PUBLIC, $$$S32 <  0, $$$S33  > 0.

Отличительная особенность записи о схеме БД: $$$S31  > 0, $$$S32 = 0, GetBits($$$S35, 230, 1, 1)=1.

Таблица 58. Маски привилегий пользователя
МаскаФлаги столбцаОписание

pu_CONN

0x80000000L

Права категории CONNECT.

pu_RSRC

0x40000000L

Права категории RESOURCE.

pu_DBAP

0x20000000L

Права категории ADMINISTRATOR.

pt_ALLP

0x1f800000L

Все права.

pt_SLCT

0x10000000L

Права на выборку данных из таблицы.

pt_INSR

0x08000000L

Права на добавление в таблицу.

pt_DELT

0x04000000L

Права на удаление из таблицы.

pt_UPDT

0x02000000L

Права на корректировку таблицы.

pt_ALTR

0x01000000L

Права на модификацию схемы таблицы.

pt_INDX

0x00800000L

Права на создание индекса.

pt_EXEC

0x00400000

Права на выполнение процедуры.

pt_EXOW

0x00200000

Права на выполнение процедуры от имени владельца процедуры.

pt_AUDT

0x00100000

Служебное значение, используется для аудита операций над представлениями.

pt_REFR

0x00080000

Табличная привилегия REFERENCES. Нужна для создания FOREIGN KEY, ссылающегося на PRIMARY KEY или UNIQUE в таблице, на которую необходима эта привилегия.

pu_NBKP

0x00040000

Отсутствие у пользователя привилегии BACKUP. Привилегия BACKUP есть, если бит сброшен, либо пользователь – тот, который создал базу (обычно SYSTEM).

Соответственно, значение всех привилегий на таблицу (pu_ALLP) будет равно 0x1f88.


Таблица 59. Описание полномочий пользователя (развернутое описание столбца $$$S35 для пользователя)
ПолеТип данныхСмещениеСодержание

Password[18]

L_CHAR

0

Пароль пользователя. Хранится в зашифрованном виде.

Shedule[42]

L_BYTE

18

Недельное расписание работы пользователя с дискретностью 30 мин:

  • бит=0 – в эти 30 мин. можно работать с БД;

  • бит=1 – в эти 30 мин. работа с БД запрещена.

Маска задается с 00 час. 00 мин. понедельника.

LastTimeOut

L_LONG

60

Интервал времени (в секундах), который после неудачной попытки соединения с БД будет добавляться к времени, хранимому в LastFalseConnect, для вычисления времени, когда будет разрешено повторное соединение. При первом соединении значение этой переменной равно 0, после неудачных соединений значение меняется в соответствии с заданными значениями переменных LogErrTimeout и LogErrTmCount.

LastFalseConnect[16]

L_BYTE

64

Время (DECIMAL) последнего неудачного соединения с БД.

CursorRestriction

L_WORD

80

Максимальное количество доступных курсоров (подчиненных каналов) в одном сеансе работы с БД.

ConnectionRestriction

L_WORD

82

Максимальное количество доступных каналов в одном сеансе работы с БД.

StationRestriction

L_WORD

84

Зарезервировано.

IntruderDetection

L_WORD

86

Текущее количество неуспешных попыток доступа.

StartDate[16]

L_BYTE

88

Нижняя допустимая дата работы.

EndDate[16]

L_BYTE

104

Верхняя допустимая дата работы.

Days

L_BYTE

120

Маска разрешений работы по дням недели:

  • бит=0 – работа в этот день недели разрешена;

  • бит=1 – работа в этот день недели запрещена.

Маска задается с понедельника.

StationRestrict

L_BYTE

121

Зарезервировано.

PassMaxLifeTime

L_DECIMAL

122

Время жизни пароля. При превышении этого времени пользователь может подать только одну команду – alter user для смены пароля или после смены пароля администратором.

LockedLoginDate

LDATETIME

138

Дата блокировки пользователя.

Password2[10]

L_BYTE

144

Зарезервировано.

Priority

L_WORD

154

Приоритет пользователя по умолчанию.

MaxPriority

L_WORD

156

Максимально возможный приоритет пользователя.

PriorityRange

L_WORD

158

Минимально возможный приоритет пользователя.

Audit

tUserAudit

160

Описание назначений аудита (таблица 60).

WSLIMIT

L_LONG

216

Размер рабочей области для пользователя.

MinPasswordLength

L_BYTE

220

Минимальная длина пароля пользователя.

LogErrLimit

L_BYTE

221

Количество следующих подряд неудачных попыток соединения с БД, после которых БД блокируется для пользователя.

LogErrTimeout

L_BYTE

222

Интервал времени (в секундах), который будет копироваться в поле LastTimeOut после неудачных соединений с БД, количество которых задано LogErrTmCount.

LogErrTmCount

L_BYTE

223

Количество следующих подряд неудачных попыток соединения с БД, после которых в переменную LastTimeOut будет установлено значение переменной LogErrTimeout.

TrigFlags

L_BYTE

224

Маска наличия триггеров для пользователя:

  • 0x01 – есть один или несколько триггеров AFTER LOGON;

  • 0x02 – есть один или несколько триггеров BEFORE LOGOFF.

Flags

L_BYTE

225

Маска свойств пользователя:

  • 0x01 – пользователь заблокирован;

  • 0x02 – пользователь должен установить пароль при первом входе в систему, все команды, кроме alter user, для этого пользователя будут заблокированы;

  • 0x04 – задано время жизни пароля;

  • 0x08 – время жизни пароля закончилось, пользователь должен изменить пароль при первом входе в систему, все команды, кроме alter user, для этого пользователя будут заблокированы;

  • 0x10 – для пользователя задана максимальная длительность выполнения запросов;

  • 0x20 – для пользователя используется встроенная аутентификация операционной системы;

  • 0x40 – используется автоматическая аутентификация (identified by protocol);

  • 0x80 – служебный флаг, для реализации привилегии BACKUP.

PassLifeTime

L_WORD

226

Время жизни пароля (в днях).

wQuantTimeout

L_WORD

228

Максимальная длительность выполнения запросов для пользователя (в секундах).

bSpecFlags

L_BYTE

230

Маска специальных флагов:

  • 0x01 – пользователю запрещено кэшировать результаты запросов;

  • 0x02 – признак схемы (флаг SP_USER_SCHEMA);

  • 0x04 – ставится у владельца схемы и означает, что у пользователя есть схема(ы);

  • 0x08 – признак аутентификации пользователя по LDAP-протоколу;

  • 0x10 – пароль пользователя хешируется с применением алгоритма SHA2;

  • 0x20 – идентификация по Керберос.

bReserved

L_BYTE

231

Зарезервировано.

wUserId

L_WORD

232

Если установлен флаг SP_USER_SCHEMA (т.е. это описание схемы), в этом поле хранится идентификатор владельца схемы.

bPassSalt[2]

L_BYTE

234

Случайное начальное значение для хеширования пароля пользователя.

DeviceName[4]

L_BYTE

236

Имя физического устройства, используемого по умолчанию для пользователя.


Получить способ идентификации указанного пользователя:

select
  case when getbits($$$S35,230,3,1) = 1 then 'LDAP'
       when getbits($$$s35,230,5,1) = 1 then 'KERBEROS'
       when getbits($$$s35,225,5,1) = 1 then 'SYSTEM'
       when getbits($$$s35,225,6,1) = 1 then 'PROTOCOL'
       else 'PASSWORD' end
  from $$$usr where $$$s32 = 0 and $$$s34 = ?;

Пример

CREATE OR REPLACE USER TESTER IDENTIFIED BY '12345678';
alter user tester PASSWORD LENGTH MIN 2;
alter user tester CONNECT LIMIT 5;
alter user tester PASSWORD LIFE TIME 31;

select rowid from $$$usr where $$$s34='TESTER';
|          9|

! Максимальное количество доступных каналов
select getword ($$$s35,82) from $$$usr where rowid=9;
или
select getword ($$$s35,82) from $$$usr where rowid=
(select rowid from $$$usr where $$$s34='TESTER');
|         5|

! Минимальная длина пароля
select  getbyte ($$$s35,220) from $$$usr where rowid=9;
|         2|

! Время действия пароля в днях
select  getword ($$$s35,226) from $$$usr where rowid=9;
|         31|

Описание назначений аудита пользователя

В таблице 60 приведена структура описания аудита пользователя.

Нулевое значение поля указывает на то, что аудит по данному событию не ведется.

Таблица 60. Описание назначений аудита пользователя
ПолеТип данныхПротоколируемое событие

aCreateTable

L_BYTE

Добавление записи.

aCreateView

L_BYTE

Корректировка записи.

aCreateSynonym

L_BYTE

Создание синонима.

aCreateProcedure

L_BYTE

Создание хранимой процедуры.

aCreateTrigger

L_BYTE

Создание триггера.

aDropTable

L_BYTE

Удаление таблицы.

aDropView

L_BYTE

Удаление представления.

aDropSynonym

L_BYTE

Удаление синонима.

aDropProcedure

L_BYTE

Удаление хранимой процедуры.

aDropTrigger

L_BYTE

Удаление триггера.

aAlterProcedure

L_BYTE

Модификация хранимой процедуры.

aKernel

L_BYTE

Аудит работы ядра. Маски режимов:

  • 0x01 – старт ядра;

  • 0x02 – останов ядра;

  • 0x04 – рестарт ядра;

  • 0x08 – системная ошибка;

  • 0x10 – начать аудит;

  • 0x20 – закончить аудит;

  • 0x40 – задание кодировки, используемой в БД по умолчанию;

  • 0x80 – изменение максимального размера записи.

aCreateUser

L_BYTE

Создание пользователя БД.

aDropUser

L_BYTE

Удаление пользователя БД.

aAlterUser

L_BYTE

Изменение полномочий пользователя.

aAlterPassl_word

L_BYTE

Изменение пароля.

aCreateRole

L_BYTE

Создание роли.

aDropRole

L_BYTE

Удаление роли.

aCreateGroup

L_BYTE

Создание группы.

aAlterGroup

L_BYTE

Изменение группы.

aCreateLevel

L_BYTE

Создание уровня доступа.

aAlterLevel

L_BYTE

Изменение уровня доступа.

aGrantRole

L_BYTE

Определение роли.

aRevokeRole

L_BYTE

Отмена роли.

aGrantAccess

L_BYTE

Определение прав доступа.

aRevokeAccess

L_BYTE

Отмена прав доступа.

aInsert

L_BYTE

Добавление записи в таблицу.

aUpdate

L_BYTE

Обновление записи в таблице.

aSelect

L_BYTE

Выбор записей из таблицы.

aDelete

L_BYTE

Удаление записи из таблицы.

aInsertByProc

L_BYTE

Добавление записи в таблицу из хранимой процедуры.

aUpdateByProc

L_BYTE

Обновление записи в таблице из хранимой процедуры.

aSelectByProc

L_BYTE

Выбор записи в таблице из хранимой процедуры.

aDeleteByProc

L_BYTE

Удаление записи в таблице из хранимой процедуры.

aDeleteByRef

L_BYTE

Удаление по ссылке.

aUpdateByRef

L_BYTE

Обновление по ссылке.

aCreateIndex

L_BYTE

Создание индекса.

aDropIndex

L_BYTE

Удаление индекса.

aAlterTableFile

L_BYTE

Изменение параметров файла данных (индекса) таблицы.

aAlterColumn

L_BYTE

Изменение схемы или атрибутов таблицы.

aRenameTable

L_BYTE

Переименование таблицы.

aRebuildTable

L_BYTE

Пересоздание таблицы.

aPressTable

L_BYTE

Сжатие таблицы.

aLockTable

L_BYTE

Блокирование таблицы.

aUnlockTable

L_BYTE

Разблокирование таблицы.

aGrantTable

L_BYTE

Определение прав на таблицу.

aRevokeTable

L_BYTE

Отмена прав на таблицу.

aChannelAccessDenied

L_BYTE

Неудачный доступ к системе.

aConnect

L_BYTE

Открытие канала.

aDisconnect

L_BYTE

Отсоединение канала.

aOpenCursor

L_BYTE

Открытие курсора.

aCloseCursor

L_BYTE

Закрытие курсора.

aCommit

L_BYTE

Выполнение COMMIT.

aRollback

L_BYTE

Выполнение ROLLBACK.

aExecProc

L_BYTE

Выполнение процедуры.

aExecTrig

L_BYTE

Выполнение триггера.