Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Nie można utworzyć Oracle View uzyskującego dostęp do obiektów innych schematów, pomimo dotacji

Jak wspomniano w dokumentacji (podkreślenie dodane):

Jeśli posiadasz tylko przywileje select w tabeli bazowej przyznane przez rolę, nie możesz utworzyć widoku w stosunku do niej. Nawet jeśli generalnie przejdziesz do roli, będziesz musiał trzymać wyraźne przyznanie na wierzchu dla wszystkich widoków, które chcesz utworzyć.

Wyobrażam sobie, że ma to związek z działaniem ról. Dzięki bezpośredniemu grantowi Oracle wie, czy można zobaczyć tabelę w innym schemacie. Jeśli przyznasz opcję wyboru w swoim widoku komuś innemu, wówczas, gdy ktoś zapyta o widok, Oracle wie, że istnieje łańcuch uprawnień. Jeśli Twoje bezpośrednie przydzielenie w tabeli zostanie odwołane, istnieją mechanizmy unieważniania obiektów zależnych. Ale co powinno się stać, przywilej wyboru roli na stole zostaje odebrany; lub Twój dostęp do roli zostanie cofnięty; lub po prostu w ramach własnej sesji, co powinno się stać, jeśli wyłączysz tę rolę – czy nadal możesz uzyskać dostęp do widoku? To trochę bardziej skomplikowane, niż się wydaje na pierwszy rzut oka.

Na szczęście tworzenie widoków powinno być stosunkowo rzadkie i możliwe do kontrolowania. Większość osób uzyskujących dostęp do tabeli za pośrednictwem roli nie musi tworzyć jej widoku (zakładam!).

Inną opcją jest utworzenie widoku w ARIEL schemat, a następnie nadaj uprawnienia APEX_ARIEL i/lub rolę. To, czy jest to właściwe, zależy od Twojego prawdziwego zapytania o widok i motywacji do tworzenia widoku.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaka jest różnica między tabelą tymczasową a globalną tabelą tymczasową w Oracle?

  2. SSL:400 nie wysłano wymaganego certyfikatu

  3. Nie można zarejestrować się w transakcji rozproszonej z NHibernate

  4. wstawianie wielu wierszy w Oracle SQL

  5. Musisz znaleźć następny i poprzedni dzień roboczy w Oracle