Назад | Перейти на главную страницу

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

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

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

Один из способов разрешить доступ ограниченному пользователю - это утвержденные права доступа. В качестве примера предположим следующее:

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

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

Предоставьте пользователю PERMITTED * USE права доступа к объекту программы RPG -или- GRANT через SQL. Кроме того, предоставьте пользователю ОГРАНИЧЕННЫЙ * ИСПОЛЬЗОВАНИЕ доступ к библиотечным ПРОГРАММАМ. Это позволит RESTRICTED выполнять хранимую процедуру / программу.

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

Теперь попросите пользователя ОГРАНИЧИТЬ использовать SQL для ВЫЗОВА хранимой процедуры. У нее есть полномочия на выполнение программы, потому что она имеет права * ИСПОЛЬЗОВАНИЕ для библиотечных ПРОГРАММ, а также для скомпилированного программного объекта. Хранимая процедура запускается с разрешения владельца PERMITTED, и поскольку PERMITTED имеет полный доступ к библиотечным DATA и таблицам в них, хранимая процедура может обращаться к этим таблицам и обновлять их. Любой необработанный SQL, который пытается использовать RESTRICTED, потерпит неудачу из-за недостаточных полномочий - единственное, что она может сделать, - это вызвать созданные для нее хранимые процедуры.

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