Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 можно ли гранты через динамический sql предоставлять?  [new]
gr1608
Member

Откуда:
Сообщений: 4
Народ, столкнулся с такой проблемой.
Нужно предоставить объектные привилегии через динамический sql (так как их очень много), а стандартным способом (через EXECUTE IMMEDIATE USING) это сделать не получается. Поэтому есть сомнения - а можно ли вообще DCL-операции (а именно - grant ) через динамический sql выполнять?
Заранее спасибо!
16 апр 07, 11:50    [4024708]     Ответить | Цитировать Сообщить модератору
 Re: можно ли гранты через динамический sql предоставлять?  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
gr1608
Народ, столкнулся с такой проблемой.
Нужно предоставить объектные привилегии через динамический sql (так как их очень много), а стандартным способом (через EXECUTE IMMEDIATE USING) это сделать не получается. Поэтому есть сомнения - а можно ли вообще DCL-операции (а именно - grant ) через динамический sql выполнять?


Выполнять можно. Вот только имена объектов и ролей (или пользователей) надо на bind-ингом подставлять, а конктатенировать в строку.
16 апр 07, 11:53    [4024732]     Ответить | Цитировать Сообщить модератору
 Re: можно ли гранты через динамический sql предоставлять?  [new]
Airsentry
Member

Откуда: Киев
Сообщений: 104
gr1608
через EXECUTE IMMEDIATE USING) это сделать не получается.

приведите пример
16 апр 07, 11:53    [4024737]     Ответить | Цитировать Сообщить модератору
 Re: можно ли гранты через динамический sql предоставлять?  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
Bogdanov Andrey
надо на bind-ингом подставлять

читать как "надо нЕ bind-ингом подставлять"
16 апр 07, 11:59    [4024791]     Ответить | Цитировать Сообщить модератору
 Re: можно ли гранты через динамический sql предоставлять?  [new]
gr1608
Member

Откуда:
Сообщений: 4
Вот кусок кода:

declare
v_code varchar2(20);
v_str varchar2(200);
v_str1 varchar2(200);
begin
--cbr-название схемы,CBR_RPT_134 - название таблицы,ofsa_owner - название схемы
v_code:='CBR.CBR_RPT_134';
v_str:='grant select on CBR.CBR_RPT_134 to ofsa_owner;';
v_str1:='grant select on :1 to ofsa_owner;';
EXECUTE IMMEDIATE v_str;
EXECUTE IMMEDIATE v_str1 USING v_code;
end;

Как видно- и с 'USING' и без 'USING' не проходит (Ошибка "ORA-00911: invalid character
ORA-06512: at line 9").
16 апр 07, 18:06    [4027766]     Ответить | Цитировать Сообщить модератору
 Re: можно ли гранты через динамический sql предоставлять?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
точкумсзапятой сзадускуэль убери
16 апр 07, 18:08    [4027786]     Ответить | Цитировать Сообщить модератору
 Re: можно ли гранты через динамический sql предоставлять?  [new]
gr1608
Member

Откуда:
Сообщений: 4
Точка с запятой там однозначно нужна. К тому же я попробовал(убрать ее) - не помогло
16 апр 07, 18:24    [4027896]     Ответить | Цитировать Сообщить модератору
 Re: можно ли гранты через динамический sql предоставлять?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
gr1608
Точка с запятой там однозначно нужна. К тому же я попробовал(убрать ее) - не помогло

не верю..
SQL> create user uu identified by uuu;

Пользователь создан.

SQL> begin
  2    execute immediate 'grant all on scott.emp to uu';
  3  end;
  4  /

Процедура PL/SQL успешно завершена.
16 апр 07, 18:29    [4027935]     Ответить | Цитировать Сообщить модератору
 Re: можно ли гранты через динамический sql предоставлять?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10039
gr1608
Точка с запятой там однозначно нужна. К тому же я попробовал(убрать ее) - не помогло


???

SQL> exec execute immediate 'grant select on emp to u1;'
BEGIN execute immediate 'grant select on emp to u1;'; END;

*
ERROR at line 1:
ORA-00911: invalid character
ORA-06512: at line 1


SQL> exec execute immediate 'grant select on emp to u1'

PL/SQL procedure successfully completed.

SQL> 

SY.
16 апр 07, 18:29    [4027937]     Ответить | Цитировать Сообщить модератору
 Re: можно ли гранты через динамический sql предоставлять?  [new]
Goldminer
Member

Откуда:
Сообщений: 553
gr1608
Точка с запятой там однозначно нужна. К тому же я попробовал(убрать ее) - не помогло

Oracle® Database PL/SQL User's Guide and Reference
10g Release 2 (10.2)
When constructing a single SQL statement in a dynamic string, do not include a semicolon (;) at the end inside the quotation mark. When constructing a PL/SQL anonymous block, include the semicolon at the end of each PL/SQL statement and at the end of the anonymous block; there will be a semicolon immediately before the end of the string literal, and another following the closing single quotation mark.
16 апр 07, 18:35    [4027977]     Ответить | Цитировать Сообщить модератору
 Re: можно ли гранты через динамический sql предоставлять?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10039
Well, I looked at your dynamic sql more closely:

gr1608
v_str1:='grant select on :1 to ofsa_owner;';


It has two issues:

1) semicolon at the enad, which we already discussed
2) granted object is used as bind variable. This is not allowed. Use:

declare
v_str varchar2(200);
begin
--cbr-название схемы,CBR_RPT_134 - название таблицы,ofsa_owner - название схемы
v_str:='grant select on CBR.CBR_RPT_134 to ofsa_owner';
EXECUTE IMMEDIATE v_str;
end;

SY.

Сообщение было отредактировано: 16 апр 07, 18:46
16 апр 07, 18:46    [4028037]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить