powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Опять привилегии...
12 сообщений из 12, страница 1 из 1
Опять привилегии...
    #32095179
sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sv
Гость
Господа,
подскажите пожалуйста,
какими привилегиями должен обладать пользователь user2,
чтобы он смог бы в схеме user1 делать все, что и пользователь
user1, но при этом он не должен быть админом и его права должны
распространяться только на схему user1 (ну и, конечно, user2)?

Более конкретно:
С таблицами все достаточно гладко...
Не получается дать пользователю user2 возможность создавать процедуры в схеме user1, если user2 не админ. :(

Заранее спасибо.
...
Рейтинг: 0 / 0
Опять привилегии...
    #32095244
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понимаю так(если я понимаю правильно):
1) Сначала от имени sys даёшь юзеру user1 право создавать процедуры с опцией ADMIN OPTION:
Код: plaintext
1.
2.
connect sys/<пароль>@<tnsname>;
grant create procedure to user1 with admin option;


2) Потом от имени юзера user1 даёшь право создания процедур юзеру user2
Код: plaintext
1.
2.
connect user1/<пароль>@<tnsname>;
grant create procedure to user2;


Всё.
...
Рейтинг: 0 / 0
Опять привилегии...
    #32095260
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя наверно это не совсем правильно что user1 будет иметь возможность кому попало раздавать такую системную привелегию.
...
Рейтинг: 0 / 0
Опять привилегии...
    #32095272
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, CREATE TABLE даёт право только в своей схеме создавать процедуры, значит надо давать CREATE ANY TABLE. А это даёт возможность user2 создавать в любой схеме.
Значит я был не прав.
...
Рейтинг: 0 / 0
Опять привилегии...
    #32095273
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно же CREATE ANY PROCEDURE.
Да, что в спешке не напишешь.
...
Рейтинг: 0 / 0
Опять привилегии...
    #32095281
sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sv
Гость
Сделал все, как описано,
пытаюсь:

CREATE PROCEDURE user1.sp_USER2_TEST
AS
BEGIN
NULL;
END;

Говорит:
ORA-01031: Привилегий недостаточно
...
Рейтинг: 0 / 0
Опять привилегии...
    #32095283
sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sv
Гость
Sorry, Протормозил :)

Но я не могу дать user2
CREATE ANY -- это для него слишком круто :(
...
Рейтинг: 0 / 0
Опять привилегии...
    #32095292
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сделать так:
1) В схеме юзера user1 создать процедуру, в которой динамически будет создаваться код процедуры в схеме юзера user1.
Так как привелегия EXECUTE обьектная : её можно выдавать на конкретную процедуру, конкретному пользователю - даёт возможность выдавать право выполнения такой процедуры только тем кому положено, в данном случае юзеру user2. Что-бы нельзя было выполнить какую угодно команду, включим начало в саму процедуру "CREATE OR REPLACE PROCEDURE ". Поэтому передавать надо только оставшийся текст.
Текст процедуры создания процедур(создаётся юзером user1 в своей схеме)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE PROCEDURE CREATE_PROC(p_command IN VARCHAR2)  AS
 cursor_name INTEGER;
 rows_processed INTEGER;
 v_except  EXCEPTION;
BEGIN
 cursor_name := dbms_sql.open_cursor;
 dbms_sql.parse(cursor_name,'CREATE OR REPLACE PROCEDURE '||p_command ,dbms_sql.NATIVE);

 rows_processed := dbms_sql.execute(cursor_name);
 dbms_sql.close_cursor(cursor_name);
EXCEPTION
WHEN OTHERS THEN
 dbms_sql.close_cursor(cursor_name);
 RAISE v_except;
END CREATE_PROC;


Даём право создания процедур в схеме юзера user1 юзеру user2:
Код: plaintext
1.
grant execute on CREATE_PROC to user2;


Проверим:
Код: plaintext
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.
QLWKS> connect user1
Связь установлена.

SQLWKS> CREATE OR REPLACE PROCEDURE CREATE_PROC(p_command IN VARCHAR2)  AS
      2 >  cursor_name INTEGER;
      3 >  rows_processed INTEGER;
      4 >  v_except  EXCEPTION;
      5 > BEGIN
      6 >  cursor_name := dbms_sql.open_cursor;
      7 >  dbms_sql.parse(cursor_name,'CREATE OR REPLACE PROCEDURE '||p_command ,dbms_sql.NATIVE);
      8 > 
      9 >  rows_processed := dbms_sql.execute(cursor_name);
     10 >  dbms_sql.close_cursor(cursor_name);
     11 > EXCEPTION
     12 > WHEN OTHERS THEN
     13 >  dbms_sql.close_cursor(cursor_name);
     14 >  RAISE v_except;
     15 > END CREATE_PROC;
     16 > 
     17 > 
Предложение обработано.

SQLWKS> grant execute on CREATE_PROC to user2
      2 > 
Предложение обработано.

SQLWKS> connect user2
Связь установлена.

SQLWKS> execute user1.CREATE_PROC('test1 as begin null; end;');
Предложение обработано.


Вроде работает. Вполне вероятно, что у Oracle есть какие-то стандартные возможности решения проблемы, но я не в курсе.
...
Рейтинг: 0 / 0
Опять привилегии...
    #32095294
sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sv
Гость
Круто!

Спасибо

Может кто знает попроще (более стандартно)?
...
Рейтинг: 0 / 0
Опять привилегии...
    #32095299
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ваще нафига такой геморрой? Не проще ли юзеру 2 создавать процедуры у себя и давать публичный синоним (вариант 2 - юзер 1 создаёт синоним для процедуры юзера 2)?
...
Рейтинг: 0 / 0
Опять привилегии...
    #32095301
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и привилегии соответствующие, разумеется...
...
Рейтинг: 0 / 0
Опять привилегии...
    #32095391
sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sv
Гость
Ну вобще-то наверное да...
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Опять привилегии...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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