![](/img/trans.png)
[英]Synchronizing data in tables in two different schemas in an Oracle database
[英]Permissions for two schemas in Oracle
我有两个模式MONITORING和MONITORING_CONFIGURATION。 我正在尝试创建一个表,两个模式都可以访问。 我正在以MONITORING_CONFIGURATION身份运行脚本,但不能完全排除它以MONITORING身份运行。 我可以简单地忽略由于在GRANT和CONFIGURATION的基础上创建表而仍然实现两个模式均可访问的表的目标而导致的错误并获得许可的错误吗? 错误是SQL-Fehler: ORA-01749: you may not GRANT/REVOKE privileges to/from yourself 01749. 00000 - "you may not GRANT/REVOKE privileges to/from yourself"
CREATE TABLE "MONITORING"."WEB_SERVICE_STATUS"
( "WEB_SERVICE_STATUS_ID" NUMBER,
"WEB_SERVICE_ID" NUMBER,
"STATUS" CHAR(1)
);
GRANT ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE, REFERENCES, ON COMMIT REFRESH, QUERY REWRITE, DEBUG, FLASHBACK ON "MONITORING"."WEB_SERVICE_STATUS" TO "MONITORING_CONFIGURATION";
当我确实select * from "MONITORING"."WEB_SERVICE_STATUS";
看来我拥有SELECT
权限。
我将删除该表,然后将那个确切的脚本重新运行为MONITORING。 然后,您将知道您对两个用户都有正确的授权。
以下操作是否有帮助-使用PLSQL在当前用户周围添加逻辑,然后使用EXECUTE IMMEDIATE
通过动态SQL采取适当的操作:
DECLARE
vsql VARCHAR2(1000);
BEGIN
IF user = 'MONITORING' THEN
DBMS_OUTPUT.PUT_LINE ( ' Running as ' || USER || ' - creating table' );
vsql := 'CREATE TABLE "MONITORING"."WEB_SERVICE_STATUS"
( "WEB_SERVICE_STATUS_ID" NUMBER,
"WEB_SERVICE_ID" NUMBER,
"STATUS" CHAR(1)
)';
EXECUTE IMMEDIATE vsql;
DBMS_OUTPUT.PUT_LINE ( ' Running as ' || USER || ' - issuing grant' );
vsql := ' GRANT ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE, REFERENCES, ON COMMIT REFRESH, QUERY REWRITE, DEBUG, FLASHBACK ON "MONITORING"."WEB_SERVICE_STATUS" TO "MONITORING_CONFIGURATION"';
EXECUTE IMMEDIATE vsql;
ELSE
DBMS_OUTPUT.PUT_LINE ( ' Running as ' || USER || ' - no action taken' );
END IF;
END;
/
您是否要实现与schema-之间的连接?
CREATE PUBLIC DATABASE LINK MONITORING_CONFIGURATION
USING 'MONITORING_CONFIGURATION';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.