Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle:Достъп само за четене до схемата за друг потребител?

Ако имате контрол върху начина, по който вашето приложение се свързва (напр. израз за инициализация за вашия пул от връзки), всичко, което трябва да направите, е да изпълните:

ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;

От този момент нататък (по време на живота на сесията) всяко неквалифицирано име на обект ще бъде търсено в PRODUCTS схема.

Всички безвъзмездни средства, дадени на PRODUCTS_READONLY ще бъде в сила. Сесията ще се изпълнява под идентификационните данни (и ограниченията за сигурност) на първоначалния потребител, използван за влизане.

Ако не можете да промените начина, по който връзката е установена или инициализирана, тригерът за влизане също трябва да постигне това:

create or replace trigger logon_trg
  after logon on database
begin
    if (user = 'PRODUCTS_READONLY') then
      execute immediate 'alter session set current_schema = products';
    end if;
exception
  when others then null; -- prevent a login failure due to an exception
end logon_trg;
/

Обърнете внимание, че е изключително важно да хванете всички изключение, защото в противен случай потенциална грешка в изпълнения SQL ефективно ще изведе всички от базата данни. Затова използвайте внимателно и го тествайте добре, преди да го пуснете в производство.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. По-бърз начин за вмъкване чрез скрипт в Oracle?

  2. Опит за създаване на пакет - грешка PLS-00330

  3. Защо не мога да създам тригери върху обекти, собственост на SYS?

  4. Oracle копира данни в друга таблица

  5. Функция SIGN() в Oracle