Доступные версии документации

Проверка разрешения доступа

Функция

Проверка разрешения доступа.

Спецификация
 
<имя пользователя>::=
<идентификатор таблицы>::=
Синтаксические правила

Примечания

  1. <Идентификатор таблицы> – внутренний системный номер таблицы в БД. Идентификаторы таблиц хранятся в системной таблице $$$SYSRL в столбце с именем $$$S11, имена таблиц – в столбце $$$S13. Таким образом, для получения <идентификатора таблицы> уникальной в БД таблицы AUTO можно использовать запрос:

            select $$$S11 from $$$SYSRL where $$$S13='AUTO';
            
  2. Если в БД имеются таблицы c одинаковыми именами (разные схемы), необходимо использовать имя схемы таблицы. Список схем хранится в системной таблице $$$USR, столбец $$$S34.

    select $$$S11 from $$$SYSRL, $$$USR
    where $$$s31 >0 and $$$s31=$$$s12
    and $$$S13='AUTO' and $$$s34='SYSTEM';
            
  1. Аргументы могут быть заданы <SQL-параметром>, который должен содержать спецификацию типа данных параметра.

    select access(? (CHAR(6)), ? (int));
    SYSTEM
    176
    |   SIDUAXR   |
  2. <Целочисленный литерал> должен иметь положительное значение, при прочих значениях результат функции будет NULL.

Возвращаемое значение
  1. Строка длиной 7 символов типа CHAR, содержащая коды доступных операций ('SIDUAXR' – SELECT, INSERT, DELETE, UPDATE, ALTER TABLE, CREATE INDEX, REFERENCES соответственно). Если операция недоступна, в соответствующей позиции строки ответа будет стоять пробел.

  2. Если один из параметров имеет NULL-значение, то результат будет NULL-значение.

Примеры
  1. username SYSTEM/MANAGER
    create or replace user TEST identified by 'TEST';
    grant dba to TEST;
    
    username TEST/TEST
    create or replace table tst_acs (i int);
    
    username SYSTEM/MANAGER
    select $$$S11 from $$$SYSRL where $$$S13='TST_ACS';
    |    412|
    
    username TEST/TEST
    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);
    |       |
  2. Получить список прав доступа на таблицу «Банки» пользователя «Петрова»:

    select ACCESS($$$S34,$$$S11) from $$$SYSRL,$$$USR
    where $$$S12=$$$S31 and
    $$$S34='Петров' and $$$S13='Банки';
  3. Выдать таблицы, для работы с которыми у текущего пользователя есть хотя-бы одна разрешенная операция:

    SELECT $$$S34 ,$$$S13
    FROM $$$SYSRL,$$$USR
    WHERE $$$S12 =$$$S31
    AND $$$S32 =0 AND ACCESS(USER,$$$S11) <> ' ';
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter