Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBExpert Новый топик    Ответить
 Автоматическая генерация GRANT для пакетов  [new]
Sk1N.
Member

Откуда: Курган
Сообщений: 75
IBExpert 2020.9.14.1, колеги так же проверили в последней версии.

Есть пакет с селективной ХП. Из неё делаем INSERT FROM SELECT во второй ХП, во второй ХП в автоматически сгенерированных правах создается право ввида
GRANT SELECT ON <PACKAGE_NAME> TO PROCEDURE <PROCEDURE_NAME>;
как будто это таблица, а не пакет.
При этом правильное право
GRANT EXECUTE ON PACKAGE <PACKAGE_NAME> TO PROCEDURE <PROCEDURE_NAME>;
так же создается.

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

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


Сообщение было отредактировано: 2 окт 20, 12:01
2 окт 20, 12:03    [22208013]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая генерация GRANT для пакетов  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Исправил.
3 окт 20, 07:19    [22208373]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая генерация GRANT для пакетов  [new]
Dimbuch®
Member

Откуда: Москва
Сообщений: 109
Добрый день.
Есть ещё проблема с автогрантами

Есть пакет:
+

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. В скольких местах она используется, столько раз строка и будет повторена:
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;
6 окт 20, 14:41    [22209559]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая генерация GRANT для пакетов  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Dimbuch®

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


Исправил.
7 окт 20, 08:30    [22209911]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая генерация GRANT для пакетов  [new]
Dimbuch®
Member

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

+
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 ; ^


Результат автогранта:
/* 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;
7 окт 20, 10:06    [22209956]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая генерация GRANT для пакетов  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Dimbuch®

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


Ошибся немного... Исправил.
7 окт 20, 10:40    [22209965]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая генерация GRANT для пакетов  [new]
Dimbuch®
Member

Откуда: Москва
Сообщений: 109
Спасибо! Всё отлично работает.
Особенно благодарен за DELETE-GRANT в MERGE!
7 окт 20, 11:18    [22209990]     Ответить | Цитировать Сообщить модератору
Все форумы / IBExpert Ответить