powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выполнение SP/динамических запросов с правами владельца
5 сообщений из 5, страница 1 из 1
Выполнение SP/динамических запросов с правами владельца
    #32296597
L_VV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ли в FB возможность выполнять SP / динамические запросы
не от имени текущего пользователя, а от имени создателя (владельца)
процедуры?

В ORACLE это можно сделать так:
-- Создаем пользователей
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CONNECT ADM/ADM@TEST;

CREATE USER TEST_USER1 IDENTIFIED BY TEST_USER1
DEFAULT TABLESPACE USER_DATA
TEMPORARY TABLESPACE TEMPORARY_DATA
QUOTA UNLIMITED ON USER_DATA;

GRANT CREATE SESSION TO TEST_USER1;
GRANT UNLIMITED TABLESPACE TO TEST_USER1;
GRANT CREATE PROCEDURE TO TEST_USER1;
GRANT CREATE TABLE TO TEST_USER1;


CREATE USER TEST_USER2 IDENTIFIED BY TEST_USER2
DEFAULT TABLESPACE USER_DATA
TEMPORARY TABLESPACE TEMPORARY_DATA;

GRANT CREATE SESSION TO TEST_USER2;


-- Создаем процедуры
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CONNECT TEST_USER1/TEST_USER1@TEST;

CREATE OR REPLACE PROCEDURE TEST_USER1.Test_With_Owner_Rights
AUTHID DEFINER
AS
BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE TEST_USER1.TEST1(FIRLD1 INTEGER)';
END;
/
GRANT EXECUTE ON TEST_USER1.Test_With_Owner_Rights TO TEST_USER2;

CREATE OR REPLACE PROCEDURE TEST_USER1.Test_With_Curr_User_Rights
AUTHID CURRENT_USER  -- По умолчанию
 
AS
BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE TEST_USER1.TEST2(FIRLD1 INTEGER)';
END;
/
GRANT EXECUTE ON TEST_USER1.Test_With_Curr_User_Rights TO TEST_USER2;


-- Пытаемся выполнить процедуры
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CONNECT TEST_USER2/TEST_USER2@TEST;

BEGIN
  TEST_USER1.Test_With_Owner_Rights;
END;
/
 -- PL/SQL procedure successfully completed
 

BEGIN
  TEST_USER1.Test_With_Curr_User_Rights;
END;
/
 -- ORA-01031: insufficient privileges
 
...
Рейтинг: 0 / 0
Выполнение SP/динамических запросов с правами владельца
    #32296745
L_VV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опс, ошибся.
Не AUTHID CURRENT_USER -- По умолчанию,
а AUTHID DEFINER -- По умолчанию
...
Рейтинг: 0 / 0
Выполнение SP/динамических запросов с правами владельца
    #32296888
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в общем-то нету таких средств, а какой в них смысл вобще, почему на процедуру нельзя дать GRANT текущему пользователю?
...
Рейтинг: 0 / 0
Выполнение SP/динамических запросов с правами владельца
    #32296970
L_VV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gold писал:Ну в общем-то нету таких средств, а какой в них смысл вобще, почему на процедуру нельзя дать GRANT текущему пользователю?
Жаль :(
На самом деле пример был упрощен.
В этой процедуре хотелось бы выполнить дин. SQL типа:
Код: plaintext
GRANT EXECUTE ON PROCEDURE XXX TO TEST_USER

Естественно, когда процедура выполняется с правами
текущего пользователя, он получает ошибку - нет права
дать грант на процедуру XXX. А если бы процедура выполнялась с правами
владельца (скажем, SYSDBA), такой проблемы не было бы.

Нельзя же дать до выполнения этой SP права на все объекты,
на которые данный дин. SQL и должен дать права ;)

(Упреждаю возможный вопрос - запрос формируется самой системой
на основе бизнес-прав (если так можно сказать) пользователя и,
следовательно, пользователь ничего плохого здесь сделать не может).

(В ORACLE такая схема работает успешно уже 3-й год).

Значит, придется выполнять эту процедуру непосредственно от
владельца объектов, на которые надо дать гранты.
В общем то, это не страшно. Но все же хотелось бы иметь возможность
по глобальной для сервера (отдельной БД?) или локальной
в SP настройке выполнять процедуры и/или дин. SQL
либо с правами владельца, либо текущего пользователя.

Кстати, нет информации, не планируется ли такая возможность
в следующих версиях FB? Я не нашел чего-то похожего в
Feature Requests на сайте Firebird, но может кто знает?
...
Рейтинг: 0 / 0
Выполнение SP/динамических запросов с правами владельца
    #32296989
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Много так всего написано было... Могу сказать, что GRANT и REVOKE можно выполнять в EXECUTE STATEMENT, если вам это поможет.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выполнение SP/динамических запросов с правами владельца
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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