Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / SQL SECURITY для пакетов / 17 сообщений из 17, страница 1 из 1
14.07.2016, 19:50
    #39274134
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL SECURITY для пакетов
Для тех кто не понял поясню. В 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
14.07.2016, 20:24
    #39274142
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL SECURITY для пакетов
небольшая опечатка имя процедуры забыл указать

Код: 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
14.07.2016, 20:39
    #39274145
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL SECURITY для пакетов
блин устал похоже я сегодня, ещё опечатку в предлагаемым мной варианте сделал

Код: 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
14.07.2016, 20:42
    #39274146
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL SECURITY для пакетов
Симонов ДенисКстати никого не коробит что предложение SQL SECURITY идёт сразу за именем процедуры, но перед входными параметрами. По мне это немного уродует синтаксис. Я бы предпочёл что бы сиё предложение стояло последним перед AS
по стандарту вроде должно быть после списка параметров но перед телом процедуры/функции
...
Рейтинг: 0 / 0
15.07.2016, 08:12
    #39274273
Tonal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL SECURITY для пакетов
Согласен с первым вариантом, хотя можно предложить его модификацию, 4-ый вариант:
SQL SECURITY указывается для всего пакета и возможно индивидуально для приватных функций.

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


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

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

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

А вот с пакетами сложнее. В стандарте такого чуда нету. Надо бы посмотреть что там у Oracle сделано на эту тему.
...
Рейтинг: 0 / 0
15.07.2016, 11:27
    #39274425
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL SECURITY для пакетов
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
15.07.2016, 11:51
    #39274458
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL SECURITY для пакетов
Мимопроходящий,

по поводу синтаксиса его удалось убедить. Что касается пакетов, то он тоже уже глянул в сторону Оракла.
...
Рейтинг: 0 / 0
15.07.2016, 11:56
    #39274466
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL SECURITY для пакетов
невнимательно причитал суть вопроса.
применительно к пакеджам у Оракла 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
15.07.2016, 12:07
    #39274485
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL SECURITY для пакетов
Мимопроходящий,

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

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

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

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


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

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


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


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