【问题标题】:Permissions for two schemas in OracleOracle 中两个模式的权限
【发布时间】:2018-11-13 21:17:37
【问题描述】:

我有两个架构 MONITORING 和 MONITORING_CONFIGURATION。 我正在尝试创建一个两个模式都可以访问的表。 我将脚本作为 MONITORING_CONFIGURATION 运行,但不完全排除它作为 MONITORING 运行。我是否可以简单地忽略我在 GRANT 上遇到的错误并获得权限,因为我将表创建为 MONITORING_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_CONFIGURATION运行,下一个由MONITORING运行

标签: oracle permissions schema


【解决方案1】:

我会删除该表,然后重新运行该脚本作为 MONITORING。然后你就会知道你对两个用户都有正确的授权。

【讨论】:

    【解决方案2】:

    是否有以下帮助 - 使用 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;
    /
    

    【讨论】:

    • 谢谢,这可能有用。但我将使用两个脚本解决方案,一个作为 MONITORING_CONFIGURATION 运行,另一个作为 MONITORING 运行。
    【解决方案3】:

    您是否正在尝试实现与模式之间的连接?

    CREATE PUBLIC DATABASE LINK MONITORING_CONFIGURATION
           USING 'MONITORING_CONFIGURATION'; 
    

    【讨论】:

    • 没有架构在同一个数据库上运行。不过谢谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    相关资源
    最近更新 更多