我在Schema A中有表.我使用模式A中的表在Schema B中创建了视图.
我想授予用户权限,以便从Schema B中的视图中选择数据.
为了实现这个目的,我知道我们必须在Schema A中的表上为用户B启用grant选项.
但是我想在一个脚本中完成它(这个脚本必须在模式B中).有没有办法使用模式A的用户名/密码来执行此操作.
想要使用单个脚本来部署更改并不罕见.问题是,这样的脚本需要由高级用户运行,因为它需要具有任何级别的系统权限.这通常意味着DBA帐户,最好是应用程序帐户,但SYSTEM或SYS.
原文链接:https://www.f2er.com/oracle/205091.html所以你想要的脚本看起来像这样:
grant select on user_a.t23 to user_b / grant select on user_a.t42 to user_b / create view user_b.v_69 as select t23.col1,t42.col2 from user_a.t42 join user_a.t23 on (t42.id = t23.id) / grant select on user_b.v_69 to user_c /
一个常见的场景是我们有一套单独的脚本,这些脚本已被编写为由不同的用户运行,但我们现在需要捆绑到单个部署中.原始脚本不包含模式名称,并且有很多很好的理由可以解释为什么我们不想在脚本中对它们进行硬编码.
构建该主脚本的一种方法是使用更改CURRENT_SCHEMA语法:
alter session set current_schema=USER_A / @run_grants_to_userb.sql alter session set current_schema=USER_B / @create_view69.sql @run_grants_to_userc.sql
我们仍然需要DBA用户来运行主脚本.切换当前模式的一个优点是它允许我们部署像数据库链接这样的对象,这些对象通过语法的怪癖在其声明中不能具有模式名称.一个问题是用户不会改变,因此使用USER伪列的脚本可能会产生不需要的结果.