powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Автоматическая генерация GRANT для пакетов
7 сообщений из 7, страница 1 из 1
Автоматическая генерация GRANT для пакетов
    #40004831
Sk1N.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Автоматическая генерация GRANT для пакетов
    #40005070
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправил.
...
Рейтинг: 0 / 0
Автоматическая генерация GRANT для пакетов
    #40005742
Dimbuch®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть ещё проблема с автогрантами

Есть пакет:

Код: 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
Автоматическая генерация GRANT для пакетов
    #40006014
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimbuch®

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


Исправил.
...
Рейтинг: 0 / 0
Автоматическая генерация GRANT для пакетов
    #40006041
Dimbuch®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Автоматическая генерация GRANT для пакетов
    #40006045
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimbuch®

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


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


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