2015-08-27 8 views
0

Я хочу предоставить grant-all (Все объекты схемы) одного пользователя другому пользователю. Я не хочу, чтобы в таблице были все. Что такое user1, например таблица, процедура, триггеры, синонимы, функции и т. Д., Которые должны быть доступны пользователю2 в той же базе данных (Oracle). На самом деле я создал триггер, который предоставит все привилегии пользователю2, если что-то новое развертывается в 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; 
+0

В принципе, вы не можете этого сделать. Вы должны предоставить гранты на основе «за объект». – Giova

ответ

1

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

Update:

В 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-link -

select * from [email protected]_DB_LINK 
+0

Не могли бы вы объяснить db-llink, как его создать? –

+0

* Обновлено в ответе – Stawros

+0

Спасибо за ваши комментарии stawros, я пытаюсь создать db_link, но он выдает ошибку недостаточной привилегии. Все еще меня путают с db_link, db_link используется для прямого подключения к базе данных? В моем вопросе я хочу делать операции в одном и том же. –

 Смежные вопросы

  • Нет связанных вопросов^_^