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

Предоставяне на разрешение на потребители на различна схема

Не е необичайно да искате да имате един скрипт за внедряване на промяна. Работата е там, че такъв скрипт трябва да се изпълнява от опитен потребител, защото трябва да има системни привилегии на ВСЯКО ниво. Това обикновено означава акаунт на DBA, за предпочитане акаунт на приложение, но иначе SYSTEM или SYS.

Така че скриптът, който искате, ще изглежда така:

grant select on user_a.t23 to user_b
/
grant select on user_a.t42 to user_b
/
create view user_b.v_69 as
select t23.col1, t42.col2
from   user_a.t42
       join user_a.t23
           on (t42.id = t23.id)
/
grant select on user_b.v_69 to user_c
/

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

Един от начините за изграждане на този главен скрипт е да използвате промяна на синтаксиса на CURRENT_SCHEMA:

alter session set current_schema=USER_A
/
@run_grants_to_userb.sql

alter session set current_schema=USER_B
/
@create_view69.sql
@run_grants_to_userc.sql

Все още се нуждаем от потребител на DBA, за да изпълним главния скрипт. Едно предимство на превключването на текущата схема е, че ни позволява да внедряваме обекти като връзки към бази данни, които поради странност на синтаксиса не могат да имат името на схемата в тяхната декларация. Една грешка е, че потребителят не се променя, така че скрипт, който използва псевдо-колоната USER, може да доведе до нежелани резултати.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да изброя ВСИЧКИ грантове, които е получил потребител?

  2. Как да използвам Partition By или Max?

  3. Oracle:разлика между max(id)+1 и sequence.nextval

  4. SQL Подреждане по низ, числата се появяват последни

  5. Как можем да получим интервала от 15 минути?