Разрешения IBM System i для представлений базы данных

У нас есть IBM System i под управлением IBM i OS v6r1. В этой системе я создал несколько представлений базы данных. То, что я хочу сделать, это дать определенной группе пользователей доступ ТОЛЬКО к этим представлениям и ничего больше в библиотеке, в которой находятся представления. Это возможно? У меня была группа пользователей, которая имела разрешения только на чтение для всех таблиц и представлений в библиотеке, в которой находятся мои представления, и доступ работает, когда пользователь находится в этой группе пользователей. Я попытался скопировать группу пользователей, а затем назначить разрешения только для тех представлений, которые я создал, и доступ запрещен. Должен ли пользователь или группа пользователей также иметь разрешения для таблицы, из которой происходит представление, для доступа к представлению?

1 ответ

Решение

Да. Недостаточно предоставить полномочия для использования представления. Пользователь также должен иметь права доступа к базовой таблице.

Одним из способов разрешить доступ ограниченному пользователю является принятие полномочий. Для примера давайте предположим следующее:

Пользователь RESTRICTED не имеет доступа к каким-либо таблицам. Все библиотеки либо AUT(*EXCLUDE), либо пользователь RESTRICTED имеет полномочия * EXCLUDE для всех библиотек. РАЗРЕШЕНО ПОЛЬЗОВАТЕЛЕМ может получить доступ (или владеет) к таблицам и библиотекам. Библиотека DATA имеет таблицы. Библиотека PROGRAMS имеет свои программы и хранимые процедуры.

РАЗРЕШЕНО создать хранимую процедуру RPG в библиотеке PROGRAMS. Убедитесь, что в программе указан USRPRF(*OWNER). Это означает, что при запуске программы она будет использовать полномочия владельца (РАЗРЕШЕНО), а не полномочия профиля, выполняющего ее (ОГРАНИЧЕНО).

Предоставьте пользователю PERMITTED *USE права доступа к объекту программы RPG - или - GRANT через SQL. Также предоставьте пользователю RESTRICTED *USE доступ к программным библиотекам. Это позволит RESTRICTED выполнить хранимую процедуру / программу.

Обратите внимание, что пользователь RESTRICTED не имеет прав доступа к таблицам в DATA, и вы хотите оставить его таким.

Теперь пользователь RESTRICTED использует SQL для вызова хранимой процедуры. У нее есть права на выполнение программы, потому что она имеет права * USE на библиотеку PROGRAMS, а также на скомпилированный программный объект. Хранимая процедура запускается с разрешения владельца PERMITTED, и, поскольку PERMITTED имеет полный доступ к библиотеке DATA и таблицам в ней, хранимая процедура может получать доступ к этим таблицам / обновлять их. Любой необработанный SQL, который RESTRICTED пытается использовать, потерпит неудачу из-за недостаточных прав доступа - единственное, что она может сделать, это вызвать хранимые процедуры, созданные для нее.

Если ваши программы хранятся в той же библиотеке, что и ваши данные, вам необходимо предоставить RESTRICTED *USE полномочия для библиотеки и конкретно ограничить ее (через * EXCLUDE) для всех таблиц в этой библиотеке. Может быть проще создать ОГРАНИЧЕННУЮ библиотеку, в которой хранятся только хранимые процедуры, и авторизовать ее в этой библиотеке. Это облегчает текущее обслуживание, потому что вам не нужно пытаться помнить, чтобы ограничивать ее только что созданными таблицами в DATA.

Другие вопросы по тегам