Oracle数据库中表触发的多模式权限

Oracle数据库中表触发的多模式权限,第1张

概述我正在尝试编写一个表触发器,用于查询触发器所在架构之外的另一个表.这可能吗?在我的架构中查询表似乎没有问题,但我得到: Error: ORA-00942: table or view does not exist 尝试查询我的架构外的表时. 编辑 我很抱歉第一次没有提供尽可能多的信息.我的印象是这个问题更简单. 我正在尝试在表上创建一个触发器,该表根据某些数据的存在来更改新插入的行上的某些字段,这 我正在尝试编写一个表触发器,用于查询触发器所在架构之外的另一个表.这可能吗?在我的架构中查询表似乎没有问题,但我得到:

@H_502_11@Error: ORA-00942: table or vIEw does not exist

尝试查询我的架构外的表时.

编辑

我很抱歉第一次没有提供尽可能多的信息.我的印象是这个问题更简单.

我正在尝试在表上创建一个触发器,该表根据某些数据的存在来更改新插入的行上的某些字段,这些数据可能存在于另一个模式中的表中,也可能不存在.

我用来创建触发器的用户帐户确实具有独立运行查询的权限.事实上,我有触发器打印我正在尝试运行的查询,并且能够成功运行它.

我还应该注意,我正在使用EXECUTE IMMEDIATE语句动态构建查询.这是一个例子:

@H_502_11@CREATE OR REPLACE TRIGGER MAIN_SCHEMA.EVENTSBEFORE INSERTON MAIN_SCHEMA.EVENTS REFERENCING olD AS olD NEW AS NEWFOR EACH ROWDECLARE rtn_count NUMBER := 0; table_name VARCHAR2(17) := :NEW.soME_FIELD; key_fIEld VARCHAR2(20) := :NEW.ANOTHER_FIELD;BEGIN CASE WHEN (key_fIEld = 'condition_a') THEN EXECUTE IMMEDIATE 'select count(*) from OTHER_SCHEMA_A.'||table_name||' where KEY_FIELD='''||key_fIEld||'''' INTO rtn_count; WHEN (key_fIEld = 'condition_b') THEN EXECUTE IMMEDIATE 'select count(*) from OTHER_SCHEMA_B.'||table_name||' where KEY_FIELD='''||key_fIEld||'''' INTO rtn_count; WHEN (key_fIEld = 'condition_c') THEN EXECUTE IMMEDIATE 'select count(*) from OTHER_SCHEMA_C.'||table_name||' where KEY_FIELD='''||key_fIEld||'''' INTO rtn_count; END CASE; IF (rtn_count > 0) THEN -- change some fIElds that are to be inserted END IF; END;

使用前面提到的错误,触发器在EXECUTE IMMEDIATE上接收失败.

编辑

我做了更多的研究,我可以提供更多的澄清.

我用来创建此触发器的用户帐户不是MAIN_SCHEMA或OTHER_SCHEMA_X中的任何一个.我正在使用的帐户(ME)通过架构用户自己获得所涉及表的权限.例如(USER_TAB_PRIVS):

@H_502_11@GRANTOR GRANTEE table_SCHEMA table_name PRIVILEGE GRANtable HIERARCHYMAIN_SCHEMA ME MAIN_SCHEMA EVENTS DELETE NO NOMAIN_SCHEMA ME MAIN_SCHEMA EVENTS INSERT NO NOMAIN_SCHEMA ME MAIN_SCHEMA EVENTS SELECT NO NOMAIN_SCHEMA ME MAIN_SCHEMA EVENTS UPDATE NO NOOTHER_SCHEMA_X ME OTHER_SCHEMA_X TARGET_TBL SELECT NO NO

我有以下系统权限(USER_SYS_PRIVS):

@H_502_11@USERname PRIVILEGE admin_OPTIONME ALTER ANY TRIGGER NOME CREATE ANY TRIGGER NOME UNliMITED tableSPACE NO

这就是我在Oracle文档中找到的内容:

To create a trigger in another user’s
schema,or to reference a table in
another schema from a trigger in your
schema,you must have the CREATE ANY
TRIGGER system privilege. With this
privilege,the trigger can be created
in any schema and can be associated
with any user’s table. In addition,
the user creating the trigger must
also have EXECUTE privilege on the
referenced procedures,functions,or
packages.

这里:Oracle Doc

因此,在我看来这应该可行,但我不确定它在文档中提到的“EXECUTE特权”.

解决方法 您应该为涉及的每个表和模式执行此 *** 作:

@H_502_11@grant select on OTHER_SCHEMA_%.table_name to MAIN_SCHEMA; 总结

以上是内存溢出为你收集整理的Oracle数据库中表触发的多模式权限全部内容,希望文章能够帮你解决Oracle数据库中表触发的多模式权限所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1156085.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存