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

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

Заранее спасибо.
...
Рейтинг: 0 / 0
23.01.2003, 14:20
    #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
23.01.2003, 14:39
    #32095260
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять привилегии...
Хотя наверно это не совсем правильно что user1 будет иметь возможность кому попало раздавать такую системную привелегию.
...
Рейтинг: 0 / 0
23.01.2003, 14:53
    #32095272
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять привилегии...
Пардон, CREATE TABLE даёт право только в своей схеме создавать процедуры, значит надо давать CREATE ANY TABLE. А это даёт возможность user2 создавать в любой схеме.
Значит я был не прав.
...
Рейтинг: 0 / 0
23.01.2003, 14:54
    #32095273
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять привилегии...
Конечно же CREATE ANY PROCEDURE.
Да, что в спешке не напишешь.
...
Рейтинг: 0 / 0
23.01.2003, 15:00
    #32095281
sv
sv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять привилегии...
Сделал все, как описано,
пытаюсь:

CREATE PROCEDURE user1.sp_USER2_TEST
AS
BEGIN
NULL;
END;

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

Но я не могу дать user2
CREATE ANY -- это для него слишком круто :(
...
Рейтинг: 0 / 0
23.01.2003, 15:21
    #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
23.01.2003, 15:24
    #32095294
sv
sv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опять привилегии...
Круто!

Спасибо

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


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