У меня две схемы МОНИТОРИНГ и МОНИТОРИНГ_КОНФИГУРАЦИЯ.
Я пытаюсь создать таблицу, к которой имеют доступ обе схемы.
Я запускаю сценарий как 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.





Я бы бросил стол, а затем повторно запустил этот точный сценарий как МОНИТОРИНГ. Тогда вы узнаете, что у вас есть правильные гранты для обоих пользователей.
Помогает ли следующее - используйте 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;
/
Спасибо, это может быть полезно. Но я займусь этим с помощью решения с двумя сценариями, один из которых работает как MONITORING_CONFIGURATION, а другой - как MONITORING.
Вы пытаетесь установить связь между схемой-?
CREATE PUBLIC DATABASE LINK MONITORING_CONFIGURATION
USING 'MONITORING_CONFIGURATION';
Нет схемы, работающей в той же базе данных. Но спасибо за предложение.
Я думаю, что я разделю сценарий на две части, одну для запуска
MONITORING_CONFIGURATION, а другую - дляMONITORING.