Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle View kann nicht erstellt werden, um auf die Objekte eines anderen Schemas zuzugreifen, trotz Genehmigungen

Wie angemerkt in der Dokumentation (Hervorhebung hinzugefügt):

Wenn Sie nur das Select-Privileg für die zugrunde liegende Tabelle haben, das durch eine a-Rolle gewährt wird, können Sie keine Ansicht dafür erstellen. Selbst wenn Sie allgemein zu einer Rolle wechseln, müssen Sie die explizite Genehmigung für alle Ansichten, die Sie erstellen möchten, im Vordergrund behalten.

Ich kann mir vorstellen, dass dies damit zu tun hat, wie Rollen funktionieren. Bei einem direkten Grant weiß Oracle, ob Sie die Tabelle im anderen Schema sehen können. Wenn Sie jemand anderem die Auswahl für Ihre Ansicht gewähren, weiß Oracle, dass die Kette der Berechtigungen vorhanden ist, wenn sie die Ansicht abfragen. Wenn Ihre direkte Berechtigung für die Tabelle widerrufen wird, gibt es Mechanismen, um abhängige Objekte ungültig zu machen. Aber was sollte passieren? Das Select-Privileg der Rolle für die Tabelle wird widerrufen; oder Ihr Zugriff auf die Rolle wird widerrufen; oder nur innerhalb Ihrer eigenen Sitzung, was sollte passieren, wenn Sie diese Rolle deaktivieren - können Sie immer noch auf die Ansicht zugreifen? Es ist etwas komplizierter, als es auf den ersten Blick scheint.

Glücklicherweise sollte das Erstellen von Ansichten relativ selten und kontrollierbar sein. Die meisten Leute, die über die Rolle auf die Tabelle zugreifen, müssen keine Ansicht darauf erstellen (nehme ich an!).

Eine weitere Option hier ist das Erstellen der Ansicht im ARIEL Schema und erteilen Sie dann Berechtigungen für APEX_ARIEL und/oder eine Rolle. Ob das angemessen ist, hängt von Ihrer realen Ansichtsabfrage und Ihrer Motivation für die Erstellung der Ansicht ab.