Discussion:
Права вьюхи открываемые SELECT_CATALOG_ROLE
(слишком старое сообщение для ответа)
Valera
2004-07-15 09:55:05 UTC
Permalink
Привет всем!!!

Имею Oracle 9.2 под Linux. Импортировал базу, экспортированную с 7-ки.
Поставил параметр
O7_DICTIONARY_ACCESSIBILITY=TRUE
и почти счастье, за исключение того что пользователю "user" нужен доступ из
пакетов к V_$SESSION и sys.dba_tables.
В правах смотрю, что доступ к этим вьюхам дается через SELECT_CATALOG_ROLE.
Пытаюсь так и сделать:

SQL> grant SELECT_CATALOG_ROLE to user;

Grant succeeded.
Однако не работает.
А когда даю права на прямую

SQL> grant select on V_$SESSION TO user;

Grant succeeded.

то все ОК.
В чем может быть проблема?

Валера
Zhirenkov Vitaly
2004-07-15 10:52:57 UTC
Permalink
Привет!
Post by Valera
Привет всем!!!
Имею Oracle 9.2 под Linux. Импортировал базу, экспортированную с 7-
ки.
Post by Valera
Поставил параметр
O7_DICTIONARY_ACCESSIBILITY=TRUE
и почти счастье, за исключение того что пользователю "user" нужен
доступ из
Post by Valera
пакетов к V_$SESSION и sys.dba_tables.
В правах смотрю, что доступ к этим вьюхам дается через
SELECT_CATALOG_ROLE.
Post by Valera
SQL> grant SELECT_CATALOG_ROLE to user;
Grant succeeded.
Однако не работает.
А когда даю права на прямую
SQL> grant select on V_$SESSION TO user;
Grant succeeded.
то все ОК.
В чем может быть проблема?
Проблема в том, что SELECT_CATALOG_ROLE -- это роль!
--
Zhirenkov Vitaly
Oracle9i PL/SQL Developer / DBA Certified Associate
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Valera
2004-07-15 12:01:33 UTC
Permalink
Привет!!!
Post by Zhirenkov Vitaly
Привет!
Проблема в том, что SELECT_CATALOG_ROLE -- это роль!
Так это и понятно. В общем то она, как я понимаю, она для того и создана,
что-бы не каждой вьюхе самому давать доступ, а через роль дать права. Так
ведь не работает!!! Почему?
Post by Zhirenkov Vitaly
--
Zhirenkov Vitaly
Oracle9i PL/SQL Developer / DBA Certified Associate
Валера
Alexandr V.Ivanov
2004-07-15 12:40:43 UTC
Permalink
Post by Valera
ведь не работает!!! Почему?
Все мы такие, только разные.
Боюсь, что работает, только не так как ожидалось.
Надеюсь, что ожидалось, что будет возможность доступа из
процедур.
Почти уверен (может баг особого Linux?), что в
пропатченной версии 9.2 возможно получить данные по
SELECT из SQL*Plus.

Список прав довольно легко получить. Как?
Извини, надо идти документацию читать.
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Vladislav Bykov
2004-07-16 00:26:54 UTC
Permalink
Post by Zhirenkov Vitaly
Проблема в том, что SELECT_CATALOG_ROLE -- это роль!
V> Так это и понятно. В общем то она, как я понимаю, она для того и
V> создана, что-бы не каждой вьюхе самому давать доступ, а через роль дать
V> права. Так
V> ведь не работает!!! Почему?

Камасутра гласит:

PL/SQL Blocks and Roles
The use of roles in a PL/SQL block depends on whether it is an anonymous block
or a named block (stored procedure, function, or trigger), and whether it
executes with definer rights or invoker rights.

Named Blocks with Definer Rights
All roles are disabled in any named PL/SQL block (stored procedure, function,
or trigger) that executes with definer rights. Roles are not used for
privilege checking and you cannot set roles within a definer-rights procedure.
The SESSION_ROLES view shows all roles that are currently enabled. If a named
PL/SQL block that executes with definer rights queries SESSION_ROLES, the
query
does not return any rows.

Anonymous Blocks with Invoker Rights
Named PL/SQL blocks that execute with invoker rights and anonymous PL/SQL
blocks are executed based on privileges granted through enabled roles. Current
roles are used for privilege checking within an invoker-rights PL/SQL block,
and you can use dynamic SQL to set a role in the session.
See Also: Oracle9i Database Reference

мыло на mail а здесь точка ru, слева от собаки написать bykoff E-burg
Valera
2004-07-23 08:13:09 UTC
Permalink
Привет!!!
Post by Vladislav Bykov
Post by Zhirenkov Vitaly
Проблема в том, что SELECT_CATALOG_ROLE -- это роль!
V> Так это и понятно. В общем то она, как я понимаю, она для того и
V> создана, что-бы не каждой вьюхе самому давать доступ, а через роль
дать
Post by Vladislav Bykov
V> права. Так
V> ведь не работает!!! Почему?
PL/SQL Blocks and Roles
The use of roles in a PL/SQL block depends on whether it is an anonymous block
or a named block (stored procedure, function, or trigger), and whether it
executes with definer rights or invoker rights.
Named Blocks with Definer Rights
All roles are disabled in any named PL/SQL block (stored procedure, function,
or trigger) that executes with definer rights. Roles are not used for
privilege checking and you cannot set roles within a definer-rights procedure.
The SESSION_ROLES view shows all roles that are currently enabled. If a named
PL/SQL block that executes with definer rights queries SESSION_ROLES, the
query
does not return any rows.
Anonymous Blocks with Invoker Rights
Named PL/SQL blocks that execute with invoker rights and anonymous PL/SQL
blocks are executed based on privileges granted through enabled roles. Current
roles are used for privilege checking within an invoker-rights PL/SQL block,
and you can use dynamic SQL to set a role in the session.
See Also: Oracle9i Database Reference
Понял - попробовал. Спасибо за разьяснени!!!
Но как всегда, появилось маленькое "но", кот. мешает пониманию
происходящего.
А именно. У меня после импорта не откомпилилось чать процедур. Когда из
навигатора вхожу в процедуру, она мне ругается на какую-то DBA вью, даю
права напрямую
пользователю, запускаю компиляцию невалидных обьектов
exec utl_recomp.recomp_serial();
процедура - откомпилина.
Таких процедур было несколько, и на одной из них - я случайно в навигаторе
не просто
закрыл ее, а нажал - сохранить, и процедура откомпилилась, хотя прав на ту
вьюху,
на кот. была ругань - я не давал. Вот теперь я опять - не понимаю этот мир
:-(
После этого еще раз поигрался, создал роль, дал права на таблицы через
роль, не компилятся
процедуры из навигатора :-( Даю првава непосредственно на таблицы - все
работает.
А что же было с импортированной базой? Возможно что причина в том что база
экспортировалась
в семерке - или то что они с закрытым кодом?

Валера

PS
Это уже - так, не проблема (проблем нет, база перенесена из семерки в
девятку и работает), а просто
стремление понять, что же происходит.
Kuznetsov Andrey
2004-07-16 05:19:47 UTC
Permalink
Post by Valera
В чем может быть проблема?
Для себя я это объясняю так.
Роль - это категория всей базы данных.
А "право напрямую" - категория схемы, которая дает это право.

Допустим вы создаете приложение в двух схемах.
Вы можете создать схему А. В схеме А процедуру А.А1.
Потом создаете схему В.
И допустим даете роль Z пользователю В, которая разрешает читать из схемы А.
Пользователь В пишет свои процедуры, которые читают данные из А.
Дальше делаете экспорт этих двух схем А и В. Роль Z остается за кадром ..в
экспорт не попадает,
т.к. она не часть схемы А или В.
В результате, после иморта в другой БД приложение работать не будет,
т.к. некоторые процедуры схемы В "потеряли права" (вместе с ролью)
на чтение из схемы А.
Loading...