向不同架构上的用户授予权限

mah*_*hen 8 oracle

我在Schema A中有表.我使用模式A中的表在Schema B中创建了视图.

我想授予用户权限,以便从Schema B中的视图中选择数据.

为此,我知道我们必须在模式A中的表上为用户B启用grant选项.但我想在一个脚本中执行此操作(此脚本必须在模式B中).有没有办法使用模式A的用户名/密码来执行此操作.

APC*_*APC 6

希望有一个脚本来部署更改并不稀奇。事实是,这样的脚本需要由超级用户运行,因为它需要在ANY级别具有系统特权。通常,这表示一个DBA帐户,最好是一个应用程序帐户,否则就是SYSTEM或SYS。

因此,您想要的脚本如下所示:

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
/
Run Code Online (Sandbox Code Playgroud)

常见的情况是,我们有一套单独的脚本,这些脚本被编写为由不同的用户运行,但是现在我们需要将其捆绑到一个部署中。原始脚本不包含架构名称,并且有很多很好的原因使我们不想在脚本中对其进行硬编码。

构建该主脚本的一种方法是使用更改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
Run Code Online (Sandbox Code Playgroud)

我们仍然需要一个DBA用户来运行主脚本。切换当前模式的一个优点是,它允许我们部署诸如数据库链接之类的对象,这些对象通过语法的怪异不能在其声明中包含模式名称。一个陷阱是用户没有更改,因此使用USER伪列的脚本可能会产生不需要的结果。


小智 6

只需运行查询

将 TABLE1 上的插入、选择、更新、删除权限授予 SCHEMA2;


Ale*_*ole 3

仅在某个时刻以用户 A 身份连接。如果您确实愿意,您仍然可以在一个脚本中完成此操作:

connect userA/passwordA
grant select on my_table to userB;
connect userB/passwordB
create view my_view as select * from userA.my_table;
Run Code Online (Sandbox Code Playgroud)

当然,现在您有一个脚本,它向任何可以读取它的人公开两组用户凭据。例如,在生产之前需要认真考虑一些事情。

如果您希望其他用户能够从视图中进行选择,则无需向userA.my_table他们授予显式权限;只要视图所有者可以看到基础表,其他用户只需要能够看到该视图即可。这通常是重点(或其中之一),因为您可以将视图限制为仅将基础表中的选定数据公开给世界其他地方。我假设您有理由不在模式 A 中创建视图。

我不确定您是否真的在询问使用管理选项向用户 B 授予选择权限,以便用户 B 可以将用户 A 表上的选择权限授予其他人。如果可能的话,这听起来不是一个好主意,也不是视图正常工作所必需的。