sql >> Databáze >  >> RDS >> Oracle

Udělení oprávnění uživatelům v jiném schématu

Není neobvyklé chtít mít jeden skript pro nasazení změny. Jde o to, že takový skript musí spouštět zkušený uživatel, protože musí mít systémová oprávnění na JAKÉKOLI úrovni. Obvykle to znamená účet DBA, nejlépe účet aplikace, ale jinak SYSTEM nebo SYS.

Požadovaný skript by tedy vypadal takto:

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
/

Běžným scénářem je, že máme sadu jednotlivých skriptů, které byly napsány tak, aby je spouštěli různí uživatelé, ale které nyní potřebujeme sloučit do jednoho nasazení. Původní skripty neobsahují názvy schémat a existuje mnoho dobrých důvodů, proč bychom je nechtěli pevně zakódovat do skriptů.

Jedním ze způsobů, jak vytvořit tento hlavní skript, je použít změnit syntaxi 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

Pro spuštění hlavního skriptu stále potřebujeme uživatele DBA. Jednou z výhod přepínání aktuálního schématu je to, že nám umožňuje nasadit objekty, jako jsou databázové odkazy, které prostřednictvím vtipu syntaxe nemohou mít ve své deklaraci název schématu. Jednou nevýhodou je, že uživatel se nemění, takže skript, který využívá pseudosloupec USER, může způsobit nežádoucí výsledky.



  1. SQL INSERT z SELECT

  2. Minimální protokolování s INSERT…SELECT a Fast Load Context

  3. Návrh databáze pro hru pro více hráčů/jednoho kvízu

  4. Mybatis:Mapujte část SQL na HashMap uvnitř POJO