powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
19 сообщений из 19, страница 1 из 1
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39702329
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот есть вьюха ALL_TAB_PRIVS. Вроде бы всё можно достать из неё.

Но есть одна тонкость. Если 2 объекта разного типа имеют одинаковое название, то их привилегии отделить не получается.
Например, SEQUENCE и JAVA SOURCE на приложенной картинке. Одинаковые названия, grantor и grantee, схема - всё.

Хорошо, если для таких различных типов объектов можно догадаться, что SELECT не относится к JAVA SOURCE. Но ведь может оказаться PROCEDURE и JAVA SOURCE, у них список доступных привилегий идентичен.

Как их разделить? Ведь в 11.2 в этой вьюхе нет поля TYPE.
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39702379
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теоретически такое возможно, но, видимо, не актуально

Если очень накаляет -- сделать свою вьюху
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39702388
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ВасяЕсли 2 объекта разного типа имеют одинаковое названиеRTFM Within a namespace, no two objects can have the same name (FAQ)
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39702392
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле, введение столбца TYPE не сильно улучшило ситуацию
Например в 11.2.0.3
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
tst> select count(count(*)), sum(count(*))
  2  from dba_tab_privs
  3  group by grantee, owner, table_name, grantor, privilege
  4  having count(*) > 1
  5  /

COUNT(COUNT(*)) SUM(COUNT(*))
--------------- -------------
             25            60

tst> with duplicate_grants as (
  2     select grantee, owner, table_name, grantor, privilege
  3     from dba_tab_privs
  4     group by grantee, owner, table_name, grantor, privilege
  5     having count(*) > 1
  6  )
  7  select owner, object_name, object_type, subobject_name
  8  from dba_objects
  9  where (owner, object_name) in (select owner, table_name from duplicate_grants)
 10  order by 1, 2, 3, 4
 11  /

OWNER      OBJECT_NAME                    OBJECT_TYPE         SUBOBJECT_NAME
---------- ------------------------------ ------------------- ------------------------------
SYS        ALERT_TYPE                     TYPE                $VSN_1
SYS        ALERT_TYPE                     TYPE                $VSN_2
SYS        ALERT_TYPE                     TYPE
SYS        AQ$_DESCRIPTOR                 TYPE                $VSN_1
SYS        AQ$_DESCRIPTOR                 TYPE                $VSN_2
SYS        AQ$_DESCRIPTOR                 TYPE                $VSN_3
SYS        AQ$_DESCRIPTOR                 TYPE
SYS        AQ$_REG_INFO                   TYPE                $VSN_1
SYS        AQ$_REG_INFO                   TYPE                $VSN_2
SYS        AQ$_REG_INFO                   TYPE                $VSN_3
SYS        AQ$_REG_INFO                   TYPE
SYS        AQ$_REG_INFO                   TYPE BODY
SYS        AQ$_REG_INFO_LIST              TYPE                $VSN_1
SYS        AQ$_REG_INFO_LIST              TYPE                $VSN_2
SYS        AQ$_REG_INFO_LIST              TYPE                $VSN_3
SYS        AQ$_REG_INFO_LIST              TYPE
SYS        AQ$_SUBSCRIBER                 TYPE                $VSN_1
SYS        AQ$_SUBSCRIBER                 TYPE
SYS        AQ$_SUBSCRIBER_T               TYPE                $VSN_1
SYS        AQ$_SUBSCRIBER_T               TYPE
SYS        AWRDRPT_TEXT_TYPE              TYPE                $VSN_1
SYS        AWRDRPT_TEXT_TYPE              TYPE
SYS        AWRDRPT_TEXT_TYPE_TABLE        TYPE                $VSN_1
SYS        AWRDRPT_TEXT_TYPE_TABLE        TYPE
SYS        AWRRPT_HTML_TYPE               TYPE                $VSN_1
SYS        AWRRPT_HTML_TYPE               TYPE
SYS        AWRRPT_HTML_TYPE_TABLE         TYPE                $VSN_1
SYS        AWRRPT_HTML_TYPE_TABLE         TYPE
SYS        CHNF$_REG_INFO                 TYPE                $VSN_1
SYS        CHNF$_REG_INFO                 TYPE
SYS        CHNF$_REG_INFO                 TYPE BODY
SYS        LCR$_ROW_LIST                  TYPE                $VSN_1
SYS        LCR$_ROW_LIST                  TYPE
SYS        LCR$_ROW_UNIT                  TYPE                $VSN_1
SYS        LCR$_ROW_UNIT                  TYPE
SYS        LCR$_ROW_UNIT                  TYPE BODY
SYS        MSG_PROP_T                     TYPE                $VSN_1
SYS        MSG_PROP_T                     TYPE
SYS        ODCICOLINFO                    TYPE                $VSN_1
SYS        ODCICOLINFO                    TYPE
SYS        ODCICOLINFOLIST                TYPE                $VSN_1
SYS        ODCICOLINFOLIST                TYPE
SYS        ODCICOLINFOLIST2               TYPE                $VSN_1
SYS        ODCICOLINFOLIST2               TYPE
SYS        ODCIEXTTABLEINFO               TYPE                $VSN_1
SYS        ODCIEXTTABLEINFO               TYPE
SYS        ODCIFUNCCALLINFO               TYPE                $VSN_1
SYS        ODCIFUNCCALLINFO               TYPE
SYS        ODCIINDEXCTX                   TYPE                $VSN_1
SYS        ODCIINDEXCTX                   TYPE                $VSN_2
SYS        ODCIINDEXCTX                   TYPE                $VSN_3
SYS        ODCIINDEXCTX                   TYPE
SYS        ODCIINDEXINFO                  TYPE                $VSN_1
SYS        ODCIINDEXINFO                  TYPE                $VSN_2
SYS        ODCIINDEXINFO                  TYPE
SYS        ODCIPARTINFO                   TYPE                $VSN_1
SYS        ODCIPARTINFO                   TYPE
SYS        ODCIQUERYINFO                  TYPE                $VSN_1
SYS        ODCIQUERYINFO                  TYPE
SYS        SCHEDULER$_EVENT_INFO          TYPE                $VSN_1
SYS        SCHEDULER$_EVENT_INFO          TYPE
SYS        SCHEDULER$_EVENT_INFO          TYPE BODY
SYS        XMLGENFORMATTYPE               TYPE                $VSN_1
SYS        XMLGENFORMATTYPE               TYPE
SYS        XMLGENFORMATTYPE               TYPE BODY

65 rows selected.

В 12 [у меня] такого не наблюдается
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> select count(count(*)), sum(count(*))
  2  from dba_tab_privs
  3  group by grantee, owner, table_name, grantor, privilege
  4  having count(*) > 1
  5  /

COUNT(COUNT(*)) SUM(COUNT(*))
--------------- -------------
              0

Но тут я не в курсе -- либо не хранятся права на старые версии типов, либо их просто нет
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39702393
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicПравильный ВасяЕсли 2 объекта разного типа имеют одинаковое названиеRTFM Within a namespace, no two objects can have the same name (FAQ) JAVA [RE]SOURCE в другом пространстве имен
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SQL> select owner, table_name from dba_tab_privs where type like 'JAVA%'
  2  and table_name not like '%/%'
  3  /

OWNER                TABLE_NAME
-------------------- ------------------------------
SYS                  OracleXML
SYS                  OracleXMLStore
SYS                  AQAPI_BUILT_BY_JDK_VERSION_6

SQL> create function AQAPI_BUILT_BY_JDK_VERSION_6 return number as begin return 0; end;
  2  /

Function created.

SQL> grant execute on AQAPI_BUILT_BY_JDK_VERSION_6 to public;

Grant succeeded.

SQL> select grantee, owner, privilege, type from dba_tab_privs where table_name='AQAPI_BUILT_BY_JDK_VERSION_6';

GRANTEE              OWNER                PRIVILEGE                                TYPE
-------------------- -------------------- ---------------------------------------- ------------------------
PUBLIC               SYS                  EXECUTE                                  JAVA RESOURCE
PUBLIC               SYS                  EXECUTE                                  FUNCTION

...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39702394
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровJAVA [RE]SOURCE в другом пространстве именЭто как бы намекает, накуя козе баян.
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39702395
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, я тоже против жабы в БД
Но почему-то меня никто не слушает
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39702932
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну не только JAVA [RE]SOURCE в другом пространстве имен. В 11.2 еще и MINING MODEL.

Вы против них тоже? ;-)

Понятно, что глупо одинаково называть разные объекты, но запрета нет, значит, всегда найдутся те, кто именно так и сделает по закону Мерфи.
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39702953
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ВасяПонятно, что глупо одинаково называть разные объекты, но запрета нет, значит, всегда найдутся те, кто именно так и сделает по закону Мерфи.

Ну тебя ведь услышали и в 12C добавили TYPE так в чем вопрос?

SY.
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39702966
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

дык, вопрос-то по 11.2.
Я думал, может, что-то проглядел и есть какой-то способ разделить-таки корректно привилегии от разных объектов с одинаковыми именами.
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39702996
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ВасяЯ думал, может, что-то проглядел и есть какой-то способ разделить-таки корректно привилегии от разных объектов с одинаковыми именами.

Самый лучший способ это стандарты, например у нас в конторе есть ODAC (Oracle Database Architecture Committee) которая кроме всего прочего устанавливает стандарты наименования. Так-что используй скажем префикс SEQ_ /суффикс _SEQ для последовательностей и JS_/_JS для java source.

SY.
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39703027
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYПравильный ВасяПонятно, что глупо одинаково называть разные объекты, но запрета нет, значит, всегда найдутся те, кто именно так и сделает по закону Мерфи.

Ну тебя ведь услышали и в 12C добавили TYPE так в чем вопрос?

SY.TYPE мало помогает, надо OBJECT_ID
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39703088
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровTYPE мало помогает, надо OBJECT_ID

Если ты о типах, то на дубли просто не нужно обращать внимание. Каждый раз когда тип эволюционирует Oracle создает новый object_id с тем-же object_name но разным subobject_name но логически это тот-же обьект (тот-же тип) и существующие гранты автоматом перейдут и на новый object_id (ведь GRANT/REVOKE на уровне эволюций типа не поддерживаются ) создав ничего не значащий дубль в XXX_TAB_PRIVS. Но соглашусь Oracle мог-бы и почистить за собой. Ведь если грант дается впeрвые то он дается не на все а только на последнюю эволюцию:


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
SQL> create or replace
  2    type x_type
  3      as object(
  4                x number
  5               )
  6  /

Type created.

SQL> alter type x_type
  2    add attribute(
  3                  y number
  4                 )
  5  /

Type altered.

SQL> alter type x_type
  2    add attribute(
  3                  z number
  4                 )
  5  /

Type altered.

SQL> select  object_name,
  2          subobject_name,
  3          object_type
  4    from  dba_objects
  5    where owner = 'SCOTT'
  6      and object_name = 'X_TYPE'
  7  /

OBJECT_NAME SUBOBJECT_NAME OBJECT_TYPE
----------- -------------- -----------
X_TYPE      $VSN_1         TYPE
X_TYPE      $VSN_2         TYPE
X_TYPE                     TYPE

SQL> grant execute on x_type to u1
  2  /

Grant succeeded.

SQL> select  table_name,
  2          type,
  3          privilege
  4    from  dba_tab_privs
  5    where owner = 'SCOTT'
  6      and table_name = 'X_TYPE'
  7  /

TABLE_NAME TYPE PRIVILEGE
---------- ---- ---------
X_TYPE     TYPE EXECUTE

SQL> 




SY.
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39703091
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, я это знаю
И сразу обратил на это внимание, если ты не заметил
И считаю, что нет смысла оправдывать явно неправильные решения
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39703093
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровИ считаю, что нет смысла оправдывать явно неправильные решения

Вячеслав,

Я и не оправдывал: "Но соглашусь Oracle мог-бы и почистить за собой".

SY.
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39703107
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, наверное, косноязычный

Вопрос не в том,чтоб "подчищать за собой"
Вопрос в том, что право на EXECUTE для ODCIINDEXCTX присутствует 4 раза
Введение поля TYPE только подтверждает, что право на объект ODCIINDEXCTX типа TYPE присутствует 4 раза
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39703110
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав,

Так было всегда. Отсутствие/наличие дублей и их количеcтво зависит от числа эволюций типа после выдачи гранта. Например 10G:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
SQL> select  banner
  2    from  v$version
  3  /

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for 64-bit Windows: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production

SQL> create or replace
  2    type x_type
  3      as object(
  4                x number
  5               )
  6  /

Type created.

SQL> alter type x_type
  2    add attribute(
  3                  y number
  4                 )
  5  /

Type altered.

SQL> alter type x_type
  2    add attribute(
  3                  z number
  4                 )
  5  /

Type altered.

SQL> grant execute on x_type to u1
  2  /

Grant succeeded.

SQL> select  object_id
  2    from  dba_objects
  3    where owner = 'SCOTT'
  4      and object_name = 'X_TYPE'
  5  /

 OBJECT_ID
----------
     97216
     97217
     97218

SQL> select  table_name,
  2          privilege
  3    from  dba_tab_privs
  4    where owner = 'SCOTT'
  5      and table_name = 'X_TYPE'
  6  /

TABLE_NAME PRIVILEGE
---------- ---------
X_TYPE     EXECUTE

SQL> drop type x_type
  2  /

Type dropped.

SQL> create or replace
  2    type x_type
  3      as object(
  4                x number
  5               )
  6  /

Type created.

SQL> alter type x_type
  2    add attribute(
  3                  y number
  4                 )
  5  /

Type altered.

SQL> grant execute on x_type to u1
  2  /

Grant succeeded.

SQL> alter type x_type
  2    add attribute(
  3                  z number
  4                 )
  5  /

Type altered.

SQL> select  object_id
  2    from  dba_objects
  3    where owner = 'SCOTT'
  4      and object_name = 'X_TYPE'
  5  /

 OBJECT_ID
----------
     97219
     97220
     97221

SQL> select  table_name,
  2          privilege
  3    from  dba_tab_privs
  4    where owner = 'SCOTT'
  5      and table_name = 'X_TYPE'
  6  /

TABLE_NAME PRIVILEGE
---------- ---------
X_TYPE     EXECUTE
X_TYPE     EXECUTE

SQL> drop type x_type
  2  /

Type dropped.

SQL> create or replace
  2    type x_type
  3      as object(
  4                x number
  5               )
  6  /

Type created.

SQL> grant execute on x_type to u1
  2  /

Grant succeeded.

SQL> alter type x_type
  2    add attribute(
  3                  y number
  4                 )
  5  /

Type altered.

SQL> alter type x_type
  2    add attribute(
  3                  z number
  4                 )
  5  /

Type altered.

SQL> select  object_id
  2    from  dba_objects
  3    where owner = 'SCOTT'
  4      and object_name = 'X_TYPE'
  5  /

 OBJECT_ID
----------
     97222
     97223
     97224

SQL> select  table_name,
  2          privilege
  3    from  dba_tab_privs
  4    where owner = 'SCOTT'
  5      and table_name = 'X_TYPE'
  6  /

TABLE_NAME PRIVILEGE
---------- ---------
X_TYPE     EXECUTE
X_TYPE     EXECUTE
X_TYPE     EXECUTE

SQL> 



SY.
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39703111
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты тоже бухаешь?
Я же и говорю, что добавление столбца TYPE не совсем решает проблему -- уж лучше добавьте OBJECT_ID, а клиент сам разберется
...
Рейтинг: 0 / 0
Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
    #39703112
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровТы тоже бухаешь?
Я же и говорю, что добавление столбца TYPE не совсем решает проблему -- уж лучше добавьте OBJECT_ID, а клиент сам разберется

А зачем? Ведь все это эволюции одного и того-же типа и с точки зрения привилегий у grantee либо есть привилегия на тип либо нет. Поэтому я и говорил - XXX_TAB_PRIVS должен показывать привилегию на тип только один раз (в 12C хотя-бы тупо добавить DISTINCT).

SY.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как узнать список прав на объекты для конкретного grantee в Ora 11.2 ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]