powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Grant execute
12 сообщений из 12, страница 1 из 1
Grant execute
    #33987615
AKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то я не пойму.. в Оракле такое проходит:

Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
connect system/*****

CREATE OR REPLACE PROCEDURE aki_bank(deco IN VARCHAR2) is
BEGIN
UPDATE g.cl_c
set g_u = deco 
where code = '124568';
commit;
END;
/

Procedure created

begin
aki_bank('test333');
end;
PL/SQL procedure successfully completed

CREATE USER "INVENTOPER0101" IDENTIFIED BY "oper01"
 DEFAULT TABLESPACE USER
 TEMPORARY TABLESPACE TEMPORARY
 QUOTA 80M ON USER QUOTA 10M ON TEMPORARY
User created
 
GRANT CREATE SESSION TO "INVENTOPER0101"
Grant succeeded
 
GRANT "CONNECT" TO "INVENTOPER0101"
Grant succeeded

GRANT EXECUTE any procedure TO "INVENTOPER0101"
Grant succeeded

connect INVENTOPER0101/*****

select * from g.cl_c
ORA- 00942 : table does not exist
(это понятно гранта-то на эту таблицу INVENTOPER0101 не имеет!!!!)

begin
reg.aki_bank('testOper');
end;
PL/SQL procedure successfully completed

В PostgreSQL 8.1 при таком подходе я получаю ошибку, связанную с отсутствием у пользователя "INVENTOPER0101" прав на UPDATE таблицы g.cl_c
...
Рейтинг: 0 / 0
Grant execute
    #33988237
AKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А точней вот так не работает постгре что ли???

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE USER test LOGIN
  ENCRYPTED PASSWORD 'md505a671c66aefea124cc08b76ea6d30bb'
  NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE;

GRANT EXECUTE ON FUNCTION editbp(IN int8, OUT cnumber "varchar"
........)
TO test;

пользователь создан и грант выдан...

Переконнектимся под пользователем test.....

Код: plaintext
SELECT * FROM editbp( 25 );

получили

Код: plaintext
ERROR:  permission denied for relation budpasport

(в функции editbp СЕЛЕКТ на связку таблиц), как только дал пользователю ТЕСТ права на чтение из этих таблиц - все заработало

Но так же не должно быть!!!???

В Оракле достаточно дать право на процедуру, а давать права на чтение или модификацию таблиц этому пользователю я не желаю!!!

Есть ли тут выход??? Или это глюк(фича)??? постгре???
...
Рейтинг: 0 / 0
Grant execute
    #33988847
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то давать надо было также и код создания процедуры в постгресе, но скромные телепатические способности подсказывают, что недочитана документация на CREATE FUNCTION :
документация
SECURITY INVOKER indicates that the function is to be executed with the privileges of the user that calls it. That is the default. SECURITY DEFINER specifies that the function is to be executed with the privileges of the user that created it.
...
Рейтинг: 0 / 0
Grant execute
    #33989103
AKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sad SpiritВообще-то давать надо было также и код создания процедуры в постгресе, но скромные телепатические способности подсказывают, что недочитана документация на CREATE FUNCTION :
документация
SECURITY INVOKER indicates that the function is to be executed with the privileges of the user that calls it. That is the default. SECURITY DEFINER specifies that the function is to be executed with the privileges of the user that created it.


то что вызов функции для ее овгнера.. мне известно...
но я же привет пример Оракловый, в котором все ок...
1 создал функцию под одним юзером == вызов ее принадлежит создателю
2 - создал 2-го юзера = дал грант на выполнение 2-му
3 - зашел под 2-м и вызвал функцию...

в постгреСКЛ я так понял, что-то нужно еще сделать???
Что именно????
Я хочу получить то же самое, что и в 1-м посте!!!!
Дать юзеру право только на выполнение этой функции не давая ему права на селект-апдейт-инсерт в таблицах!!!!

хотите пример этой функции:
Код: 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.
CREATE OR REPLACE FUNCTION editbp(IN int8, OUT cnumber "varchar", OUT ddatereestr date,....., OUT cvillname "varchar") AS
$BODY$
SELECT budpasport.cNumber, budpasport.dDatereestr, 
budpasport.cRishennyano, budpasport.dDaterishennya,
budpasport.dPaymentdate, budpasport.nPaymentsum, 
budpasport.nSquare, budpasport.nPrivNo,
budpasport.nExplNo, budpasport.nYearInExpl,
budpasport.cNote, budpasport.projectstypesid, 
budpasport.typebudid, budpasport.fioid, budpasport.houseadrid,
typebud.ctypname,
projectstypes.cprojectstypes,
TRIM(both ' ' from Fio.cSurname||' '||Fio.cName||' '||Fio.cFather) AS cFio,
Houses.cHouseno, Houses.Streetid, Streets.cStreetName, Streets.villid AS StrVilId,
Villages.cVillname
FROM budpasport, typebud, projectstypes, Fio, Houses, Streets, Villages 
WHERE budpasport.id = $ 1 
AND budpasport.typebudid = typebud.id
AND budpasport.projectstypesid = projectstypes.id
AND budpasport.fioid = Fio.id
AND Budpasport.Houseadrid = Houses.id 
AND Houses.Streetid = Streets.id
AND Streets.villid = Villages.id ;
$BODY$
  LANGUAGE 'sql' VOLATILE;
ALTER FUNCTION editbp(IN int8, OUT cnumber "varchar", OUT ddatereestr date,....., OUT cvillname "varchar") OWNER TO "system";
GRANT EXECUTE ON FUNCTION 

editbp(IN int8, OUT cnumber "varchar", OUT ddatereestr date,....., OUT cvillname "varchar") TO public;
GRANT EXECUTE ON FUNCTION 
editbp(IN int8, OUT cnumber "varchar", OUT ddatereestr date,....., OUT cvillname "varchar")  TO "system";
GRANT EXECUTE ON FUNCTION 
editbp(IN int8, OUT cnumber "varchar", OUT ddatereestr date,....., OUT cvillname "varchar")  TO test;
...
Рейтинг: 0 / 0
Grant execute
    #33989340
AKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть никак что ли???

Нельзя в ПостгреСКЛ пользователю дать грант только на выполнение конкретной процедуры, на давая при этом грантов на объекты, входящие в тело процедуры???

подскажите ж!!!???
Ведь не должно ж так быть???
...
Рейтинг: 0 / 0
Grant execute
    #33989346
4321ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вас же уже послали. и разжевали

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE [ OR REPLACE ] FUNCTION
    name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
    [ RETURNS rettype ]
  { LANGUAGE langname
    | IMMUTABLE | STABLE | VOLATILE
    | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
    | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
    | AS 'definition'
    | AS 'obj_file', 'link_symbol'
  } ...
    [ WITH ( attribute [, ...] ) ]

или

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
    action [, ... ] [ RESTRICT ]
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
    RENAME TO new_name
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
    OWNER TO new_owner
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
    SET SCHEMA new_schema

where action is one of:

    CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
    IMMUTABLE | STABLE | VOLATILE
    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER

там же

автор
Код: plaintext
1.
2.
[EXTERNAL] SECURITY INVOKER

[EXTERNAL] SECURITY DEFINER 
SECURITY INVOKER indicates that the function is to be executed with the privileges of the user that calls it. That is the default. SECURITY DEFINER specifies that the function is to be executed with the privileges of the user that created it.
скоко можно проходить мимо разжеванного? хотите оракла - имейте оракла, и не приставайте к постгре с вашими глупостями
...
Рейтинг: 0 / 0
Grant execute
    #33989542
AKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да классно тыкать носом в хэлп, в котором даже примера не приведено блин...

Привер нельзя что ли написать??? Проще выпады в сторну оракола делать?
...
Рейтинг: 0 / 0
Grant execute
    #33989566
AKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorry за резкий тон
не сдержался...
но пример написания простейшей функции, для того, чтобы ее можно было вызвать не создателем, все же можно???

CREATE OR REPLACE FUNCTION test(IN int8, OUT cvillname "varchar") AS
$BODY$
SELECT Villages.cVillname
FROM Villages
WHERE Villages.id = $1;
$BODY$
LANGUAGE 'sql' VOLATILE SECURITY INVOKER as 'mytest';
GRANT EXECUTE ON FUNCTION test(IN int8, OUT cvillname "varchar") TO test;
...
Рейтинг: 0 / 0
Grant execute
    #33989570
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aki
Привер нельзя что ли написать???
Код: plaintext
1.
alter function editbp(...) security definer;

::в сторону::
но пожалуй, больше я в темы юзера Aki отвечать не буду. нервный он какой-то...
...
Рейтинг: 0 / 0
Grant execute
    #33989600
4321ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akiда классно тыкать носом в хэлп, в котором даже примера не приведено блин...

Привер нельзя что ли написать??? Проще выпады в сторну оракола делать?мля.................................................................ерштвоюмедь

вам же ясно написали
SECURITY INVOKER indicates that the function is to be executed with the privileges of the user that calls it . That is the default . SECURITY DEFINER specifies that the function is to be executed with the privileges of the user that created it .
вы читать умеете? Даже не вьезжая в аглицкий подставить вместа
SECURITY INVOKER (что по умолчанию)
SECURITY DEFINER
вы могли уже давно, и похевать фан. Или сунуть текст в афтопереводчик, коих до опупения в сети.


разъясняю, "выпады" имели место быть в конкретно вашу сторону, оракл тут не при чем. скорее всего и в нем вы - валенок
...
Рейтинг: 0 / 0
Grant execute
    #33989653
AKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sad Spirit[
Код: plaintext
1.
alter function editbp(...) security definer;
...

СПАСИБО!!!

Sad Spirit
::в сторону::
но пожалуй, больше я в темы юзера Aki отвечать не буду. нервный он какой-то...

Увы.. сказааное выше (не Вами) "скоко можно проходить мимо разжеванного? хотите оракла - имейте оракла, и не приставайте к постгре с вашими глупостями " - вот это есть нервное

но, если бы в хэлпе был пример, а не просто описание... вопроса бы не было...

Еще раз спасибо!!!

Код: plaintext
1.
2.
3.
4.
5.
  Дальше пошли легкиЯ оффтопы....  пришлось  сделать монтаж ;-) 
  Не  обижайтесь -
  скучно  смотреть как вполне разумные люди вместо чтения доки пытаются доказать недоказуемое....    да еще и на арго. Легче уж  свистом общаться ;))

 WBR   Shweik
  
...
Рейтинг: 0 / 0
Grant execute
    #33989958
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так разные defaults могут поссорить людей...
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Grant execute
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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