2015-11-24 4 views
3

Я в основном оракул новичок, так что простите меня, если это глупый вопрос ...Когда упомянуть AUTHID, как CURRENT_USER

Я прочитал много статей уже AUTHID, я понимаю, что AUTHID оговорка инструктирует Oracle о том, должна ли выполняться рутина с правами invoker (CURRENT_USER) или с правами владельца (DEFINER). Если предложение не указано, Oracle по умолчанию использует AUTHID DEFINER.

Не могли бы вы дать мне простой пример для лучшего понимания authID?

ответ

2

Вот пример:

User1 имеет DEPARTMENTS таблицу.

Пользователь2 также имеет таблицу ОТДЕЛОВ.

Если мы создадим эту процедуру в рамках User2 схемы

-- Connected as User2  
    CREATE OR REPLACE PROCEDURE create_dept (

     v_deptno NUMBER, 
     v_dname VARCHAR2, 
     v_mgr NUMBER, 
     v_loc NUMBER) 
    AUTHID CURRENT_USER AS 
    BEGIN 
     INSERT INTO departments VALUES (v_deptno, v_dname, v_mgr, v_loc); 
    END; 
    /

Тогда, если мы называем эту процедуру - после того, как дать соответствующую privileges- от Пользователя1,

-- Connected as User1 
CALL create_dept(44, 'Information Technology', 200, 1700); 

Запись будет вставлена ​​на:

User1.DEPARTMENTS

Поскольку процедура была выполнена AS CURRENT USER - User1, вызывающий.

Если мы пропустили AUTHID CURRENT_USER, когда была создана процедура, запись будет вставлена ​​в User2.DEPARTMENTS ... как обычно.

HTH

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