Разрешения для двух схем в Oracle - PullRequest
0 голосов
/ 04 июня 2018

У меня есть две схемы 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.

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Помогает ли следующее: использовать PLSQL для добавления логики в отношении того, что текущий пользователь затем предпринимает с помощью динамического SQL соответствующего действия, используя EXECUTE IMMEDIATE:

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;
/
0 голосов
/ 05 июня 2018

Вы пытаетесь установить связь между схемой?

CREATE PUBLIC DATABASE LINK MONITORING_CONFIGURATION
       USING 'MONITORING_CONFIGURATION'; 
0 голосов
/ 04 июня 2018

Я бы отбросил таблицу, а затем повторно запустил этот точный сценарий как МОНИТОРИНГ.Тогда вы будете знать, что у вас есть правильные гранты для обоих пользователей.

...