Права / безопасность для хранимых процедур в DB2 LUW - PullRequest
0 голосов
/ 11 марта 2019

ОБНОВЛЕННЫЙ вопрос: Суть моей проблемы заключается в следующем: созданная хранимая процедура, которую я (Пользователь1) не может выбрать из определенной таблицы (таблица1, созданная другим пользователем (Пользователь2)) из-за:

CREATE OR REPLACE PROCEDURE TEST_SCHEMA.TEST_PROCEDURE(OUT r_count INTEGER)
LANGUAGE SQL
BEGIN
       SET r_count = (SELECT COUNT(*) FROM TEST_SCHEMA.TABLE1);
END

OK. Строки не были затронуты SQLWarning: Код: 20480 Состояние SQL: 0168Y --- Вновь определенный объект "TEST_SCHEMA.TEST_PROCEDURE" помечается как недействительный, поскольку он ссылается на объект "TEST_SCHEMA.TABLE1", который не определен или недействителен, или определитель не имеет права доступ к нему .. SQLCODE = 20480, SQLSTATE = 0168Y, Драйвер = 4.22.29

Однако, когда я выбираю из таблицы1 в обычном окне запроса, проблем нет, поэтому я подумал, что что-то не так с опцией безопасности хранимой процедуры

SELECT COUNT(*) FROM TEST_SCHEMA.TABLE1

Имена таблиц и хранимых процедур полностью определены. Хранимая процедура создается и выполняется пользователем1. Привилегия, данная пользователю1 для выбора из таблицы1, является привилегией группы.

1 Ответ

1 голос
/ 11 марта 2019

Создатель процедуры должен иметь соответствующую привилегию для таблицы со статической ссылкой либо напрямую, либо через роли.

Оператор CREATE PROCEDURE (SQL) :

Авторизация
Привилегии, которыми обладает ID авторизации оператора, должны включать хотя бы одно из следующих полномочий:

  • Если неявное или явное имя схемы процедуры не соответствуетсуществует, полномочия IMPLICIT_SCHEMA для базы данных.
  • Если имя схемы процедуры относится к существующей схеме, привилегия CREATEIN для схемы.
  • Полномочия DBADM

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

Чтобы заменить существующую процедуру, ID авторизации оператора должен быть владельцем существующей процедуры (SQLSTATE 42501).

Групповые привилегии не учитываются для любой таблицы или представления, указанных воператор CREATE PROCEDURE (SQL).

...