Проверка разрешения доступа
Функция
Проверка разрешения доступа.
Спецификация
::=
::=
::=
Синтаксические правила
Примечания
-
< Идентификатор таблицы >
– внутренний системный номер таблицы в БД. Идентификаторы таблиц хранятся в системной таблице$$$SYSRL
в столбце с именем$$$S11
, имена таблиц – в столбце$$$S13
. Таким образом, для получения< идентификатора таблицы >
уникальной в БД таблицы AUTO можно использовать запрос:select $$$S11 from $$$SYSRL where $$$S13='AUTO';
-
Если в БД имеются таблицы c одинаковыми именами (разные схемы), необходимо использовать имя схемы таблицы. Список схем хранится в системной таблице
$$$USR
, столбец$$$S34
.select $$$S11 from $$$SYSRL, $$$USR where $$$s31 >0 and $$$s31=$$$s12 and $$$S13='AUTO' and $$$s34='SYSTEM';
-
Аргументы могут быть заданы
< SQL-параметром >
, который должен содержать спецификацию типа данных параметра.select access(? (CHAR(6)), ? (int)); SYSTEM 176 | SIDUAXR |
-
< Целочисленный литерал >
должен иметь положительное значение, при прочих значениях результат функции будет NULL.
Возвращаемое значение
-
Строка длиной 7 символов типа CHAR, содержащая коды доступных операций ('SIDUAXR' –
SELECT
,INSERT
,DELETE
,UPDATE
,ALTER TABLE
,CREATE INDEX
,REFERENCES
соответственно). Если операция недоступна, в соответствующей позиции строки ответа будет стоять пробел. -
Если один из параметров имеет NULL-значение, то результат будет NULL-значение.
Примеры
-
username SYSTEM/MANAGER8 create or replace user TEST identified by '12345678'; grant dba to TEST; username TEST/12345678 create or replace table tst_acs (i int); username SYSTEM/MANAGER8 select $$$S11 from $$$SYSRL where $$$S13='TST_ACS'; | 412| username TEST/12345678 select access('SYSTEM', 412); | | grant update on TST_ACS to SYSTEM; select access('SYSTEM', 412); | U | revoke update on TST_ACS from SYSTEM; select access('SYSTEM',412); | |
-
Получить список прав доступа на таблицу «Банки» пользователя «Петрова»:
select ACCESS($$$S34,$$$S11) from $$$SYSRL,$$$USR where $$$S12=$$$S31 and $$$S34='Петров' and $$$S13='Банки';
-
Выдать таблицы, для работы с которыми у текущего пользователя есть хотя-бы одна разрешенная операция:
SELECT $$$S34, $$$S13 FROM $$$SYSRL, $$$USR WHERE $$$S12 =$$$S31 AND $$$S32 =0 AND ACCESS(USER, $$$S11) < > ' ';