Да. Недостаточно предоставить полномочия для использования представления. Пользователь также должен иметь права доступа к базовой таблице.
Одним из способов разрешить доступ ограниченному пользователю является принятие полномочий. Для примера давайте предположим следующее:
Пользователь 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.