Предоставить привилегию роли с параметром администратора Против предоставления роли пользователю с параметром администратора?

Я немного запутался между следующими двумя СЛУЧАЯМИ, хотя я знаю результат, но я не очень убежден в причине этого. Нужна помощь от экспертов базы данных.

(Скажем) dba создает роль ROLE1 вместе с USER1 и USER2

connect /as sysdba create user USER1 identified by xyz; create user USER2 identified by abc; create role ROLE1;

СЛУЧАЙ 1:

  1. Привилегия "выбрать любую таблицу" предоставляется ROLE1 без опции администратора

    connect /as sysdba grant select any table to ROLE1;

  2. Предоставьте ROLE1 пользователю USER1 с опцией администратора

    connect /as sysdba grant ROLE1 to USER1 with admin option;

  3. Может ли пользователь USER1 предоставить "выбрать какую-либо привилегию" другим пользователям?

    connect USER1/xyz grant select any table to USER2;

Я получил ORA-01031: ошибка недостаточных привилегий здесь, что означает, что это не правильный путь.

СЛУЧАЙ 2:

  1. Привилегия "выбрать любую таблицу" предоставляется ROLE1 с опцией администратора

    connect /as sysdba grant select any table to ROLE1 with admin option;

  2. Предоставьте ROLE1 пользователю USER1 независимо от того, предоставляете ли вы его без или с возможностью администратора

    connect /as sysdba grant ROLE1 to USER1;

  3. Может ли пользователь USER1 предоставить "выбрать какую-либо привилегию" другим пользователям?

    connect USER1/xyz grant select any table to USER2;

Это работает отлично, не сообщая ни об одной ошибке.

Может кто-нибудь, пожалуйста, помогите понять, почему CASE 2 работает, а почему нет CASE1?

1 ответ

Решение

СЛУЧАЙ 1:

grant ROLE1 to USER1 with admin option; означает, что вы можете предоставить ROLE1 другим пользователям, независимо от того, что было предоставлено ROLE1, таким образом grant select any table to USER2; не работает.

Тем не мение, grant ROLE1 to USER2; должно сработать.

Вариант 2:

Вы получаете разрешение (через роль ROLE1, лайк DBA роль получает) select any table другим пользователям. Так, grant select any table to USER2; работает.

С другой стороны grant ROLE1 to USER2; должен потерпеть неудачу.

Другие вопросы по тегам