предоставить привилегии на роль - PullRequest
0 голосов
/ 15 декабря 2018

Вопрос состоит в следующем:

Создайте роль «UnivUser» и предоставьте этой роли привилегии выбора, обновления, вставки, удаления и выполнения пакетов и последовательностей pl / sql.Этот пользователь не сможет делать ничего, кроме этих действий, чтобы помочь вам, вы можете искать в диалоге привилегий SqlDevelopp для пользователя.

выполнить, выбрать и удалить работу для меня, используя эти команды:

GRANT select_catalog_role to UnivUser
GRANT execute_catalog_role to UnivUser
GRANT delete_catalog_role to UnivUser

но для insert и update у меня это не работает. Я не знаю, как это сделать, или, может быть, я не понял вопроса.

1 Ответ

0 голосов
/ 16 декабря 2018

Я не знаю, неправильно ли вы поняли вопрос, но я знаю, что не уверен, что вы написали весь вопрос.

Предоставленные вами привилегии связаны с доступом к объектам, принадлежащим SYS, иЯ действительно не могу сказать, нужно ли тебе это делать.

С моей точки зрения, вы должны придерживаться объектных привилегий , то есть предоставлять то, что вы указали в своих собственных объектах, этой роли.Например (создано в моей базе данных XE 11g):

Предоставить Скотту право создавать роли:

SQL> connect sys/pwd@xe as sysdba
Connected.
SQL> grant create role to scott;

Grant succeeded.

Создать роль и предоставить ей определенные привилегии:

SQL> connect scott/tiger
Connected.
SQL> create role univuser identified by univuser;

Role created.

SQL> grant select, update, insert, delete on emp to univuser;

Grant succeeded.

SQL> create or replace procedure p_test is begin null; end;
  2  /

Procedure created.

SQL> grant execute on p_test to univuser;

Grant succeeded.

SQL> create sequence seq_test;

Sequence created.

SQL> grant select on seq_test to univuser;

Grant succeeded.

Список привилегий, которые UNIVUSER имеет:

SQL> select table_name, privilege from role_tab_privs where role = 'UNIVUSER';

TABLE_NAME                     PRIVILEGE
------------------------------ ----------------------------------------
EMP                            DELETE
EMP                            INSERT
EMP                            UPDATE
EMP                            SELECT
P_TEST                         EXECUTE
SEQ_TEST                       SELECT

6 rows selected.

Теперь предоставьте эту роль другому пользователю в моей базе данных:

SQL> grant univuser to mike;

Grant succeeded.

Давайте посмотрим, может ли Майк (или не может) что-то делатьс предметами Скотта;не забудьте SET ROLE:

SQL> connect mike/lion
Connected.
SQL> set role univuser identified by univuser;

Role set.

SQL> select count(*) from scott.emp;

  COUNT(*)
----------
        12

SQL> select scott.seq_test.nextval from dual;

   NEXTVAL
----------
         2

SQL> exec scott.p_test;

PL/SQL procedure successfully completed.

SQL>

Кажется, все в порядке.

[РЕДАКТИРОВАТЬ: написать SQL, который пишет SQL]

SQL> select 'grant select, insert, update, delete on ' || table_name || ' to univuser;'
  2  from user_tables;

'GRANTSELECT,INSERT,UPDATE,DELETEON'||TABLE_NAME||'TOunivuser;'
-------------------------------------------------------------------------------
grant select, insert, update, delete on EMP to univuser;
grant select, insert, update, delete on BONUS to univuser;
grant select, insert, update, delete on SALGRADE to univuser;
grant select, insert, update, delete on DEPT to univuser;

SQL>

SQL> select 'grant execute on ' || object_name || ' to univuser;'
  2  from user_objects
  3  where object_type in ('PROCEDURE', 'FUNCTION', 'SEQUENCE');

'GRANTEXECUTEON'||OBJECT_NAME||'TOUNIVUSER;'
--------------------------------------------------------------------------------
grant execute on EMPTY_TABLE to univuser;
grant execute on SIEROT to univuser;
grant execute on P_RC to univuser;
grant execute on F_RC to univuser;
grant execute on MYFUNCTION to univuser;
grant execute on F_RET to univuser;
grant execute on F_REGNUM to univuser;
grant execute on F_COUNT_OF_SUNDAYS to univuser;
grant execute on P_TEST to univuser;
grant execute on F_TEST to univuser;
grant execute on MTJ_ID_SEQ to univuser;
...