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