Полная привилегия одного пользователя Oracle (все объекты схемы) для другого пользователя

Я хочу предоставить grant-all (все объекты схемы) одного пользователя другому пользователю. Я не хочу садиться за стол. Какие у пользователя 1 есть таблицы, процедуры, триггеры, синонимы, функции и т. д., которые должны быть доступны пользователю 2 в той же базе данных (Oracle). На самом деле я создал триггер, который предоставит все привилегии пользователю user2, если что-то новое развертывается в user1. Но до создания триггера остальные объекты схемы не являются привилегированными. Это мой вопрос Спасибо

CREATE OR REPLACE PROCEDURE myddl
(p_ddl IN VARCHAR2) IS
BEGIN
EXECUTE IMMEDIATE p_ddl;
END;
/

CREATE OR REPLACE TRIGGER new_obj_grant_prv
AFTER CREATE ON schema
DECLARE
l_jobno NUMBER;
BEGIN
  IF ora_dict_obj_type IN ('TABLE','VIEW') THEN
     dbms_job.submit(l_jobno,'myddl(''GRANT ALL ON '||ora_dict_obj_owner||'.'||ora_dict_obj_name||' TO user2'');');
  END IF;

  IF ora_dict_obj_type IN ('SEQUENCE','PACKAGE') THEN
     dbms_job.submit(l_jobno,'myddl(''GRANT ALL ON '||ora_dict_obj_owner||'.'||ora_dict_obj_name||' TO user2'');');
  END IF;

  IF ora_dict_obj_type IN ('TRIGGER','SYNONYMS') THEN
     dbms_job.submit(l_jobno,'myddl(''GRANT ALL ON '||ora_dict_obj_owner||'.'||ora_dict_obj_name||' TO user2'');');
  END IF;

  IF ora_dict_obj_type IN ('PROCEDURE','FUNCTION') THEN
     dbms_job.submit(l_jobno,'myddl(''GRANT ALL ON '||ora_dict_obj_owner||'.'||ora_dict_obj_name||' TO user2'');');
  END IF;

END;

person sathish srd    schedule 27.08.2015    source источник
comment
В принципе, вы не можете этого сделать. Вы должны предоставлять гранты на основе объектов.   -  person Giova    schedule 27.08.2015


Ответы (1)


Вы можете создать db-ссылку с учетными данными user1, тогда, если user2 будет работать с вашей схемой по этой db-ссылке, он будет иметь те же права, что и user1.

Обновление:

В схеме user2 -

CREATE DATABASE LINK MY_DB_LINK
 CONNECT TO USER1
 IDENTIFIED BY **USER1_PASSWORD**
 USING '(DESCRIPTION =
    (ADDRESS =
                (PROTOCOL = TCP)
                (HOST = **HOST**)
                (PORT = 1521))
    (CONNECT_DATA = (SID = **SERVICE_NAME**))
  )'
/

Где HOST и SERVICE_NAME могут быть основаны в tnsnames.ora (он может быть основан в \oracle\product\<version>\client_1\network\admin\tnsnames.ora)

Затем вы можете использовать объекты базы данных user1 в схеме user2 по ссылке db -

select * from dual@MY_DB_LINK
person Stawros    schedule 27.08.2015
comment
Не могли бы вы объяснить db-llink, как его создать? - person sathish srd; 27.08.2015
comment
Спасибо за ваши комментарии stawros, я пытаюсь создать db_link, но выдает ошибку Insufficient Privilege Error. Тем не менее меня смущает db_link, db_link используется для подключения к другой базе данных, верно? В моем вопросе я хочу выполнять операции в одной и той же базе данных. - person sathish srd; 07.09.2015
comment
Да, обычно db-link обычно используется для подключения к другой базе данных. Ошибка Insufficient Privilege Error означает, что вы должны дать разрешение на создание db-link до GRANT CREATE DATABASE LINK to my_schema_name;. Что ж, я до сих пор не до конца понимаю бизнес-логику, но, может быть, для вас лучше создать роль со всеми грантами user1, а затем передать эту роль другим схемам. - person Stawros; 07.09.2015
comment
У тебя есть другие идеи? - person sathish srd; 18.09.2015