Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1

ТЕМА:

Выполнение DDL оператора от имени другого usera в Oracle 12 года 9 мес. назад #2707

  • Rita
  • Rita аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
Добрый день.
У меня база разделена на несколько схем для оптимизации.
Хочу написать пакет который при заведении нового пользователя дает права
на нужные объекты. Но права может раздавать только владелец.
Хотелось бы иметь такой сценарий: клиент конектится под своим именем и запускает мой пакет я в пакете от имени владельцев схем раздаю ему необходимые права.
У меня только одна идея дать владельцу какой нибудь схемы возможность раздавать права необходимым объектам из других схем. Но мне такой подход не нравится созданием ненужных зависимостей.

Как решают подобные проблемы профессионалы ?

Спасибо.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Выполнение DDL оператора от имени другого usera в Oracle 12 года 9 мес. назад #2708

В Oracle 9i на эту тему появилась специальная привилегия, называется GRANT ANY OBJECT PRIVILEGE:
"New system privilege, GRANT ANY OBJECT PRIVILEGE, allows users to grant and revoke privileges on objects on behalf of the object's owner to simplify the installation process."

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Выполнение DDL оператора от имени другого usera в Oracle 12 года 9 мес. назад #2709

решается использованием динамического SQL из хранимых процедур,
т.к. sql будет выполняться с правами владельца процедуры

например:

создаем процедуру в той схеме, на объекты которой надо дать права
create or replace procedure user1.do_grant(p_grant varchar2, p_object varchar2, p_grantee varchar2) is

begin

  execute immediate 'grant '||p_grant||' '|| on '||p_object||' to '||grantee ;

end;

/

grant execute on do_grant to user2;
теперь вызовом этой процедуры user2 может раздавать объектные привилегии от имени user1 другим пользователям

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Выполнение DDL оператора от имени другого usera в Oracle 12 года 9 мес. назад #2710

  • Rita
  • Rita аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
John Smith, забыла сказать у меня Oracle 8i

Pond, спасибо это как раз то что я искала. Но есть маленькое но (очень неприятное).
Как быть с объектами из схем SYS например DBMS_PIPE, различные представления и т.д. ? Создавать пакет в схеме SYS вроде бы некрасиво.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Выполнение DDL оператора от имени другого usera в Oracle 12 года 9 мес. назад #2711

для объектов SYS-а, как вариант, можно написать обертки в рабочей схеме и давать права на них:
create or replace view user1.v$session 

  as 

    select * from sys.v_$session;

grant select on user1.v$session to user2;

или все-таки дать эти привилегии с grant option пользователю раздающему привилегии

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Выполнение DDL оператора от имени другого usera в Oracle 12 года 9 мес. назад #2712

Возможно более простым решением будет создание пакета и просто его запуска с правами текущего пользователя
C
reate or replace package aaaaaa

AUTHID CURRENT_USER

...

end;

/
И пакте выполняется с правами CURRENT_USER
Create or replace package aaaaaa

AUTHID DEFINER

...

end;

/
И пакет выполняется от имени создателя

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
Время создания страницы: 0.290 секунд