解决方法
允许访问受限用户的一种方法是采用权限.为了举例,我们假设如下:
用户RESTRICTED无权访问任何表.
所有库都是AUT(* EXCLUDE) – 或 –
用户RESTRICTED对所有库具有* EXCLUDE权限.
USER PERMITTED可以访问(或拥有)表和库.
Library DATA有表格.
图书馆计划有程序和存储程序.
允许PERMITTED在库PROGRAMS中创建RPG存储过程.确保程序指定了USRPRF(* OWNER).这意味着当程序运行时,它将使用所有者的权限(PERMITTED)而不是执行它的配置文件的权限(RESTRICTED).
通过sql向RPG程序对象-or- GRANT授予用户PERMITTED * USE权限.此外,授予用户RESTRICTED * USE访问库程序的权限.这将允许RESTRICTED执行存储过程/程序.
请注意,用户RESTRICTED无权访问DATA中的表,并且您希望将其保留.
现在让用户RESTRICTED使用sql来调用存储过程.她有权执行该程序,因为她对库程序以及编译的程序对象具有* USE权限.存储过程在所有者PERMITTED的授权下运行,并且由于PERMITTED具有对库DATA及其中的表的完全访问权限,因此存储过程可以访问/更新这些表. RESTRICTED尝试使用的任何原始sql都会因权限不足而失败 – 她唯一能做的就是调用为她创建的存储过程.
如果您的程序与数据存储在同一个库中,则需要向库提供RESTRICTED * USE权限,并特别限制她(通过* EXCLUDE)对该库中的所有表进行限制.创建一个仅保存存储过程并将其授权给该库的RESTRICTED库可能更容易.这使得持续维护变得更容易,因为您不必尝试记住将其限制在DATA中新创建的表中.