我们有一个运行IBM i OS v6r1的IBM System i。在此系统上,我创建了一些数据库视图。我想要做的是给特定的用户组仅访问这些视图的权限,而视图所在的库中没有其他权限。这可能吗?我有一个用户组,该用户组对我的视图所在的库中的所有表和视图具有只读权限,并且当用户位于该用户组下时,访问才有效。我尝试复制用户组,然后分配权限以仅包括我创建的视图,并且拒绝访问。为了访问视图,用户或用户组是否还必须具有对视图所源自的表的权限?
我们有一个运行IBM i OS v6r1的IBM System i。在此系统上,我创建了一些数据库视图。我想要做的是给特定的用户组仅访问这些视图的权限,而视图所在的库中没有其他权限。这可能吗?我有一个用户组,该用户组对我的视图所在的库中的所有表和视图具有只读权限,并且当用户位于该用户组下时,访问才有效。我尝试复制用户组,然后分配权限以仅包括我创建的视图,并且拒绝访问。为了访问视图,用户或用户组是否还必须具有对视图所源自的表的权限?
Answers:
是。仅授予使用视图的权限是不够的。用户还必须对基础表具有权限。
允许访问受限用户的一种方法是采用授权。为了举例,我们假设以下内容:
RESTRICTED用户无权访问任何表。所有库都是AUT(* EXCLUDE)-或-用户RESTRICTED对所有库都具有* EXCLUDE权限。USER PERMITTED可以访问(或拥有)表和库。库DATA具有表。Library PROGRAMS具有程序和存储过程。
已允许在库PROGRAMS中创建一个RPG存储过程。确保程序已指定USRPRF(* OWNER)。这意味着程序运行时将使用所有者的权限(PERMITTED),而不是执行该配置文件的权限(RESTRICTED)。
通过SQL向RPG程序对象授予用户PERMITTED * USE权限-或-GRANT。另外,授予用户RESTRICTED * USE访问库PROGRAMS。这将允许RESTRICTED执行存储过程/程序。
请注意,用户RESTRICTED无权访问DATA中的表,而您希望以这种方式离开。
现在让用户RESTRICTED使用SQL来调用存储过程。她具有执行程序的权限,因为她对库PROGRAMS和已编译的程序对象具有* USE权限。该存储过程在所有者PERMITTED的权限下运行,并且由于PERMITTED具有对库DATA及其中表的完全访问权限,因此该存储过程可以访问/更新这些表。由于权限不足,RESTRICTED尝试使用的任何原始SQL都会失败-她唯一能做的就是调用为其创建的存储过程。
如果您的程序与数据存储在同一个库中,则需要向该库授予RESTRICTED * USE权限,并特别(通过* EXCLUDE)限制该库中所有表的权限。创建只保存存储过程并将其授权给该存储库的RESTRICTED库可能会更容易。这使正在进行的维护更加容易,因为您将不必记住记住要限制她不受DATA中新创建的表的限制。