powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / SQL SECURITY для пакетов
17 сообщений из 17, страница 1 из 1
SQL SECURITY для пакетов
    #39274134
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для тех кто не понял поясню. В 4.0 собираются внедрить возможность с какими правами выполнять PSQL модули. Варианта 2:
SQL SECURITY DEFINER - с правами определяющего (владельца) + права модуля
SQL SECURITY INVOKER - с правами вызывающего пользователя + права модуля

По умолчанию будет SQL SECURITY INVOKER чтобы сохранять обратную совместимость. Эта фича во многих случаях поможет избежать утомительного процесса выдачи прав процедуре и т.д.

Вот как это выглядит для процедур:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create procedure sql security definer (id integer) 
returns (name varchar(35))
as
begin
  select name
  from color
  where id = :id
  into name;
  suspend;  
end



Сейчас это сделано для процедур, функций, триггеров и таблиц (потому что вычисляемые поля).
Настала очередь пакетов.

Роман предлагает вариант 3. Т.е. примерно так:

Код: sql
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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
roman:bin$ ./isql -e -i ~/prj/testgen/sql/pk47.sql
Use CONNECT or CREATE DATABASE to specify a database
create database 'localhost:/tmp/47.fdb';
create or alter user us password 'pas';
create table t (i integer);
set term ^;
create package pk
as
begin
    function f sql security definer (i integer) returns int;
end^
 
create package body pk
as
begin
    function f sql security definer (i integer) returns int
    as
    begin
      insert into t values (:i);
      return i + 1;
    end
end^
set term ;^
grant execute on package pk to user us;
commit;
 
connect 'localhost:/tmp/47.fdb' user us password 'pas';
select pk.f(3) from rdb$database;
 
roman:bin$ ./isql -e -i ~/prj/testgen/sql/pk48.sql
Use CONNECT or CREATE DATABASE to specify a database
create database 'localhost:/tmp/48.fdb';
create or alter user us password 'pas';
create table t (i integer);
set term ^;
create package pk
as
begin
    function f sql security invoker (i integer) returns int;
end^
 
create package body pk
as
begin
    function f sql security invoker (i integer) returns int
    as
    begin
      insert into t values (:i);
      return i + 1;
    end
end^
set term ;^
grant execute on package pk to user us;
commit;
 
connect 'localhost:/tmp/48.fdb' user us password 'pas';
select pk.f(3) from rdb$database;
Statement failed, SQLSTATE = 28000
no permission for INSERT access to TABLE T



Напомню что процедуры и функции пакетов не обладают индивидуальными правами. Права можно дать только на пакет в целом и можно выдать права самому пакету. Поэтому мне ближе вариант 1. Т.е.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
set term ^;
create package sql security definer pk
as
begin
    function f (i integer) returns int;
end^
 
create package body pk
as
begin
    function f (i integer) returns int
    as
    begin
      insert into t values (:i);
      return i + 1;
    end
end^



А что думаете вы?
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274142
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
небольшая опечатка имя процедуры забыл указать

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create procedure p1 sql security definer (id integer) 
returns (name varchar(35))
as
begin
  select name
  from color
  where id = :id
  into name;
  suspend;  
end



Кстати никого не коробит что предложение SQL SECURITY идёт сразу за именем процедуры, но перед входными параметрами. По мне это немного уродует синтаксис. Я бы предпочёл что бы сиё предложение стояло последним перед AS
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274145
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин устал похоже я сегодня, ещё опечатку в предлагаемым мной варианте сделал

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
set term ^;
create package pk sql security definer
as
begin
    function f (i integer) returns int;
end^
 
create package body pk
as
begin
    function f (i integer) returns int
    as
    begin
      insert into t values (:i);
      return i + 1;
    end
end^
set term ^;
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274146
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисКстати никого не коробит что предложение SQL SECURITY идёт сразу за именем процедуры, но перед входными параметрами. По мне это немного уродует синтаксис. Я бы предпочёл что бы сиё предложение стояло последним перед AS
по стандарту вроде должно быть после списка параметров но перед телом процедуры/функции
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274273
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен с первым вариантом, хотя можно предложить его модификацию, 4-ый вариант:
SQL SECURITY указывается для всего пакета и возможно индивидуально для приватных функций.

Ну и да, для процедур/функций SQL SECURITY как бы после аргументов и returns . Всёж таки имя и сигнатура должны быть вместе.
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274306
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это:
Код: sql
1.
create package pk sql security definer


выглядит как набор слов.

Имхо, вот так лучше:
Код: sql
1.
create package pk with sql security definer
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274353
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

надо смотреть стандарт. В стандарте with не предусматривается для указания контекста безопасности. Благо в случае процедур и функция я не одинок, hvlad и dimitr тоже не нравится место размещения предложения SQL SECURITY. Да и вроде как стандарт велит указывать после входных и выходных параметров, так что это будет переделано.

А вот с пакетами сложнее. В стандарте такого чуда нету. Надо бы посмотреть что там у Oracle сделано на эту тему.
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274425
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 15 июля 2016 г. 11:15:06:

Симонов Денис> Надо бы посмотреть что там у Oracle сделано на эту тему.
у Оракла можно танцевать весьма витиевато, в том числе грантовать роли процедурам/пакеджам, наследовать права и т.д.
применительно к обсуждаемому вопросу, по умолчанию AUTHID DEFINER, но можно указать CURRENT_USER, что соответствует INVOKER rights.
синтаксис примерно такой:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE OR REPLACE PROCEDURE ... (
   ...)
AUTHID CURRENT_USER AS
BEGIN
   .......
END;


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274458
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

по поводу синтаксиса его удалось убедить. Что касается пакетов, то он тоже уже глянул в сторону Оракла.
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274466
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
невнимательно причитал суть вопроса.
применительно к пакеджам у Оракла AUTHID задаётся в спецификации (не в BODY):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE OR REPLACE PACKAGE ... AUTHID DEFINER
AS
  PROCEDURE ...;
  FUNCTION ...;
END;

CREATE OR REPLACE PACKAGE BODY ...
AS
  PROCEDURE ...
  IS
  BEGIN
    ...
  END;

  FUNCTION ...
  IS
  BEGIN
    ...
  END;
END;


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274485
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

это понятно что в спецификации. Сейчас основной вопрос давать ли процедурам и функциям пакета ещё отдельно указывать SQL SECURITY. Если давать, то получается что-то такое: если у процедур/функций пакета указано собственное предложение SQL SECURITY, то оно перекрывает предложение указанное в спецификации пакета.
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274493
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 15 июля 2016 г. 12:10:10:

Симонов Денис> Сейчас основной вопрос давать ли процедурам и функциям пакета ещё отдельно указывать SQL SECURITY.
фпясту!! во полымя!!

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274506
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

солидарен. Ну если сделают, то не страшно, хотя будет ещё одно место где можно сломать мозг неофиту.
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274520
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
следуя логике автора этого "выбрыка головного моцга",
необходимо также срочно реализовать возможность альтерить
отдельные(выборочные) процедуры пакеджа, не затрагивая всё тело.
ибо!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274536
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийнеобходимо также срочно реализовать возможность альтерить
отдельные(выборочные) процедуры пакеджа, не затрагивая всё тело.


Это ж какой квест с раздачей прав получится...
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274547
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Darkmaster!
You wrote on 15 июля 2016 г. 12:43:38:

Darkmaster> Это ж какой квест с раздачей прав получится...ректально-астральный!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SQL SECURITY для пакетов
    #39274584
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийDarkmaster> Это ж какой квест с раздачей прав получится...ректально-астральный!


Ты озвучил мои мысли :)
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / SQL SECURITY для пакетов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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