Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Автоматическая генерация GRANT для пакетов / 7 сообщений из 7, страница 1 из 1
02.10.2020, 12:03
    #40004831
Sk1N.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая генерация GRANT для пакетов
IBExpert 2020.9.14.1, колеги так же проверили в последней версии.

Есть пакет с селективной ХП. Из неё делаем INSERT FROM SELECT во второй ХП, во второй ХП в автоматически сгенерированных правах создается право ввида
Код: plsql
1.
GRANT SELECT ON <PACKAGE_NAME> TO PROCEDURE <PROCEDURE_NAME>;

как будто это таблица, а не пакет.
При этом правильное право
Код: plsql
1.
GRANT EXECUTE ON PACKAGE <PACKAGE_NAME> TO PROCEDURE <PROCEDURE_NAME>;

так же создается.

При включенной автоматической раздаче прав при перекомпиляции ХП ситуация аналогичная.

Скрип с проблемой, проблема с ХП CHECK_TEST.
Код: plsql
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.
SET TERM ^ ;

CREATE OR ALTER PACKAGE TEST
AS
begin

procedure get_test1
    returns(test1 integer);

end^

RECREATE PACKAGE BODY TEST
AS
begin

procedure get_test1
returns(test1 integer)
as
begin
  test1 = 12;
  suspend;
end
 
end^

CREATE TABLE TEST1 (
    ID  INTEGER
)^

create or alter procedure check_test
returns (
  test_1 integer)
as
begin

 // так работает 
  for select test1
  from test.get_test1
  into :test_1 do
    insert into test1 (id)
    values (:test_1);

  // так не работает 
  /*
  insert into test1 (id) 
  select test1 from test.get_test1;
  */

end^

SET TERM ; ^
...
Рейтинг: 0 / 0
03.10.2020, 07:19
    #40005070
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая генерация GRANT для пакетов
Исправил.
...
Рейтинг: 0 / 0
06.10.2020, 14:41
    #40005742
Dimbuch®
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая генерация GRANT для пакетов
Добрый день.
Есть ещё проблема с автогрантами

Есть пакет:

Код: plsql
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.
SET TERM ^ ;

CREATE OR ALTER PACKAGE NEW_PACKAGE1
AS
BEGIN
  PROCEDURE proc1;
  PROCEDURE proc2;
  PROCEDURE proc3;
END^

RECREATE PACKAGE BODY NEW_PACKAGE1
AS
BEGIN
  PROCEDURE proc1
  AS
    DECLARE VARIABLE v_operdate TIMESTAMP;
  BEGIN
    v_operdate = dt_operdate();
  END

  PROCEDURE proc2
  AS
    DECLARE VARIABLE v_operdate TIMESTAMP;
  BEGIN
    v_operdate = dt_operdate();
  END

  PROCEDURE proc3
  AS
    DECLARE VARIABLE v_operdate TIMESTAMP;
  BEGIN
    v_operdate = dt_operdate();
  END
END^

SET TERM ; ^




Раздача автогрантов (и по кнопке и в закладке DDL) создаёт повторения для Internal functions. В скольких местах она используется, столько раз строка и будет повторена:
Код: plsql
1.
2.
3.
GRANT EXECUTE ON FUNCTION DT_OPERDATE TO PACKAGE NEW_PACKAGE1;
GRANT EXECUTE ON FUNCTION DT_OPERDATE TO PACKAGE NEW_PACKAGE1;
GRANT EXECUTE ON FUNCTION DT_OPERDATE TO PACKAGE NEW_PACKAGE1;
...
Рейтинг: 0 / 0
07.10.2020, 08:30
    #40006014
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая генерация GRANT для пакетов
Dimbuch®

Есть ещё проблема с автогрантами


Исправил.
...
Рейтинг: 0 / 0
07.10.2020, 10:06
    #40006041
Dimbuch®
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая генерация GRANT для пакетов
IBExpert, спасибо, заработало. Теперь не дублируется.
Но появилась другая проблема (в предыдущей версии было нормально).
Если скомпилировать пакет (под спойлером), то при генерации автогрантов неправильно раздаются гранты для SEQUENCE

Код: plsql
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.
CREATE SEQUENCE NEW_GENERATOR1;

SET TERM ^ ;

CREATE OR ALTER FUNCTION dt_operdate
RETURNS TIMESTAMP
AS
BEGIN
  RETURN CURRENT_TIMESTAMP;
END^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER PACKAGE NEW_PACKAGE1
AS
BEGIN
  PROCEDURE proc1;
  PROCEDURE proc2;
  PROCEDURE proc3;
END^

RECREATE PACKAGE BODY NEW_PACKAGE1
AS
BEGIN
  PROCEDURE proc1
  AS
    DECLARE VARIABLE v_operdate TIMESTAMP;
    DECLARE VARIABLE v_id INTEGER;
  BEGIN
    v_operdate = dt_operdate();
    v_id = NEXT VALUE FOR new_generator1;
  END

  PROCEDURE proc2
  AS
    DECLARE VARIABLE v_operdate TIMESTAMP;
  BEGIN
    v_operdate = dt_operdate();
  END

  PROCEDURE proc3
  AS
    DECLARE VARIABLE v_operdate TIMESTAMP;
  BEGIN
    v_operdate = dt_operdate();
  END
END^

SET TERM ; ^



Результат автогранта:
Код: plsql
1.
2.
3.
4.
5.
6.
/* Following GRANT statements are generated automatically */

GRANT EXECUTE ON FUNCTION DT_OPERDATE TO PACKAGE NEW_PACKAGE1;

-- Вместо GRANT USAGE ON SEQUENCE пишет GRANT EXECUTE ON <имя_генератора>
GRANT EXECUTE ON NEW_GENERATOR1 TO PACKAGE NEW_PACKAGE1;
...
Рейтинг: 0 / 0
07.10.2020, 10:40
    #40006045
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая генерация GRANT для пакетов
Dimbuch®

Но появилась другая проблема (в предыдущей версии было нормально).
Если скомпилировать пакет (под спойлером), то при генерации автогрантов неправильно раздаются гранты для SEQUENCE


Ошибся немного... Исправил.
...
Рейтинг: 0 / 0
07.10.2020, 11:18
    #40006058
Dimbuch®
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая генерация GRANT для пакетов
Спасибо! Всё отлично работает.
Особенно благодарен за DELETE-GRANT в MERGE!
...
Рейтинг: 0 / 0
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Автоматическая генерация GRANT для пакетов / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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