oracle – 更新毗连的权限不敷
场景:我们为司理核准的哀求天生记录.待处理赏罚时,司分析变动(从人力资源供稿中一夜之间更新).我们必要更新哀求以指示新司理. 这是查询的缩写版本,应该这样做: update (select grw.approver_user_id,gup.supervisor_id from gs3.user_role gur join gsu.user_profile gup on gur.user_id = gup.user_id join gs3.request_workflow grw on gur.user_role_id = grw.user_role_id and gup.supervisor_id != grw.approver_user_id -- records with new mgr where grw.auth_status_cd = 'SUBMITTED') -- reapprovals currently open set grw.approver_id = gup.supervisor_id; 题目:执行此查询的帐户仅具有gsu.user_profile的读取权限. 内部选择事变正常并返回我必要更新的全部行…但纵然我没有更新gup.supervisor_id,好像我必要对该表具有写会见权限.假如我以具有gsu.user_profile写入权限的用户身份执行此操纵,则更新乐成. 这有公道的缘故起因吗?我甘愿不授予它不必要的帐户的权限. 感谢! 更新 接管托马斯的谜底……固然它并没有真正答复我为什么执行更新毗连的帐户必要更新权限而不更新的表的题目,但我可以看到“不行使更新毗连,他们不是ISO尺度“. 这是一种羞辱,由于我所拥有的和Thomas的提议之间的区别在于我的内容中没有任何嵌套选择.假若有人知道ISO尺度的方法来做这样的查询没有嵌套选择,我很想知道! 感谢,托马斯! 办理要领实行将ISO核准的名目用于Update语句,看看是否有用. ISO不直接在Update语句中行使Join.相反,您只能通过子查询行使毗连.另外,这也许会声名原始Update语句中的一些题目,譬喻,用于配置approver_id的子查询返回多行,这显然会导致非常,而且您必要确定怎样找到一个且只有一个应该为每一行配置的supervisor_id. Update gs3.request_workflow Set approver_id = ( Select gup.supervisor_id From gs3.user_role As gur Join gsu.user_profile As gup On gur.user_id = gup.user_id Where gup.user_role_id = gs3.request_workflow.user_role_id And gup.supervisor_id != grw.approver_user_id ) Where auth_status_cd = 'SUBMITTED' And Exists ( Select 1 From gs3.user_role As gur Join gsu.user_profile As gup On gur.user_id = gup.user_id Where gup.user_role_id = gs3.request_workflow.user_role_id And gup.supervisor_id != grw.approver_user_id ) (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |