首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模式B表的模式A授予模式C

模式B表的模式A授予模式C
EN

Stack Overflow用户
提问于 2022-04-27 14:38:51
回答 1查看 40关注 0票数 0

我有一个应用程序模式U32_C5和另一个模式MIG_SRC,它有一些表,然后我们有一个角色RO_ROLE,其中我们获得了schema U32_C5提供的一些表的授权。RO_ROLE分配给另一个架构MRGO_RO,该架构是只读的。

在这里,我需要授予从MIG_SRCMRGO_RO catch的表的select,在这里,我可以从生产中的应用程序模式U32_C5运行这些授权的过程,所以当我尝试下面这样的内容时,它说不存在表或视图(这似乎是显而易见的)。

U32_C5执行授权

将MIG_SRC.MOBILE_CELLPHONE_PAIRINGS上的select授予MRGO_RO;

我想到的另一种方法是在MRGO_RO上为MIG_SRC模式创建DB链接,但它也支持在MIG_SRC表上进行读/写操作,这在生产中是不允许的。

DB链接存在于U32_C5模式中,用于MIG_SRC模式

因此,在不创建DB的情况下,寻找一种完成上述任务的方法是值得欢迎的。

我想要实现的需求脚本示例--请记住,我不能也不希望登录到MIG_SRC,我寻找的唯一方法就是使用U32_C5和没有DBA帮助。

代码语言:javascript
复制
A RO ROLE Created by DBA's 

Create role RO_ROLE;

/* Create application schema, table inside it and grant select on it to RO_ROLE*/

CREATE USER U32_C5 IDENTIFIED BY U32_C5 DEFAULT TABLESPACE; 

GRANT ALTER SESSION TO U32_C5; 
GRANT CREATE SESSION TO U32_C5; 

GRANT CREATE database link TO U32_C5; 

GRANT CREATE table TO U32_C5; 


create table U32_C5_test_tab (id number);

grant select on U32_c5.U32_C5_Test_tab to RO_ROLE;


/* Create Read Only schema, grant RO_ROLE to it */

CREATE USER mrgo_ro IDENTIFIED BY mrgo_ro DEFAULT TABLESPACE;  

GRANT ALTER SESSION TO mrgo_ro; 
GRANT CREATE SESSION TO mrgo_ro; 

grant ro_role to mrgo_ro;

/* Create SRC schema, table inside it */

CREATE USER MIG_SRC IDENTIFIED BY MIG_SRC DEFAULT TABLESPACE; 

GRANT ALTER SESSION TO MIG_SRC; 
GRANT CREATE SESSION TO MIG_SRC; 

GRANT CREATE database link TO MIG_SRC; 

GRANT CREATE table TO MIG_SRC; 

create table mig_src_test_tab (id number);


/* login to Apllication Schema U32_C5 */

sqlplus U32_C5/U32_C5@SID

grant select on mig_src.mig_src_test_tab to mrgo_ro;  -- for me it gives error here at this step table or does not exist 

/* login to Read Only Schema mrgo_ro */

sqlplus mrgo_ro/mrgo_ro@SID

select * from mig_src.mig_src_test_tab;
or 
select * from mig_src_test_tab;
EN

回答 1

Stack Overflow用户

发布于 2022-04-27 18:55:35

如果我对你的理解是正确的,那么WITH GRANT OPTION就是你所缺少的。

一旦某人(A)将他们自己的对象上的特权授予其他人(B),而(B)必须将这些特权“转发”给(C),那么帮助的是WITH GRANT OPTION

文档说:

指定WITH GRANT选项,使受赠方能够将对象特权授予其他用户和角色。对授予GRANT选项的限制--只有在授予用户或公共的时,才能指定GRANT选项,而不能在授予角色时指定。

这意味着您应该直接授予特权,而不是通过角色。这个事实并不一定是一个缺点,因为有了名为PL/SQL的过程,通过角色获得的特权无论如何都不会起作用,所以您最终可能会获得直接授权。

其他选择-你可以考虑-与你所说的有关:

当我尝试下面这样的内容时,它说表或视图不存在

如果您为这些表创建了一个同义词,那么您就不会得到这样的错误。

正如您所说的,数据库链接不是一个选项--通过使用它,您可以完全访问数据库(因为您必须知道用户名/密码才能创建DB链接,而这并不是真正的只读访问)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72030672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档