我有一个应用程序模式U32_C5和另一个模式MIG_SRC,它有一些表,然后我们有一个角色RO_ROLE,其中我们获得了schema U32_C5提供的一些表的授权。RO_ROLE分配给另一个架构MRGO_RO,该架构是只读的。
在这里,我需要授予从MIG_SRC到MRGO_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帮助。
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;发布于 2022-04-27 18:55:35
如果我对你的理解是正确的,那么WITH GRANT OPTION就是你所缺少的。
一旦某人(A)将他们自己的对象上的特权授予其他人(B),而(B)必须将这些特权“转发”给(C),那么帮助的是WITH GRANT OPTION。
文档说:
指定WITH GRANT选项,使受赠方能够将对象特权授予其他用户和角色。对授予GRANT选项的限制--只有在授予用户或公共的时,才能指定GRANT选项,而不能在授予角色时指定。
这意味着您应该直接授予特权,而不是通过角色。这个事实并不一定是一个缺点,因为有了名为PL/SQL的过程,通过角色获得的特权无论如何都不会起作用,所以您最终可能会获得直接授权。
其他选择-你可以考虑-与你所说的有关:
当我尝试下面这样的内容时,它说表或视图不存在
如果您为这些表创建了一个同义词,那么您就不会得到这样的错误。
正如您所说的,数据库链接不是一个选项--通过使用它,您可以完全访问数据库(因为您必须知道用户名/密码才能创建DB链接,而这并不是真正的只读访问)。
https://stackoverflow.com/questions/72030672
复制相似问题