Sì. Non è sufficiente concedere l'autorizzazione per utilizzare una vista. L'utente deve inoltre disporre dell'autorizzazione anche per la tabella sottostante.
Un modo per consentire l'accesso a un utente con restrizioni è l'autorizzazione adottata. A titolo di esempio, supponiamo che:
L'utente RESTRICTED non ha accesso a nessuna tabella. Tutte le librerie sono AUT (* EXCLUDE) - oppure l'utente RESTRICTED ha l'autorizzazione * EXCLUDE a tutte le librerie. L'UTENTE CONSENTITO può accedere (o possedere) alle tabelle e alle librerie. La libreria DATA ha le tabelle. Biblioteca PROGRAMMI ha i programmi e le procedure memorizzate.
Hanno PERMESSO creare una procedura memorizzata RPG nella libreria PROGRAMMI. Assicurarsi che nel programma sia specificato USRPRF (* OWNER). Ciò significa che quando il programma viene eseguito utilizzerà l'autorità del proprietario (PERMESSO) anziché l'autorità del profilo che lo esegue (RISERVATO).
Concedere all'utente l'autorizzazione PERMESSO * USE all'oggetto programma RPG -o-- GRANT tramite SQL. Inoltre, concedi all'utente RESTRICTED * USE l'accesso alla libreria PROGRAMMI. Ciò consentirà a RESTRICTED di eseguire la procedura / programma memorizzati.
Si noti che l'utente RESTRICTED non ha diritti di accesso alle tabelle in DATA e si desidera lasciarlo in quel modo.
Ora fare in modo che l'utente RESTRICTED usi SQL per CHIAMARE la procedura memorizzata. Ha l'autorità per eseguire il programma perché ha i diritti * USE per la libreria PROGRAMMI e l'oggetto programma compilato. La procedura memorizzata viene eseguita sotto l'autorizzazione del proprietario, CONSENTITO e poiché PERMESSO ha pieno accesso ai DATI della libreria e alle relative tabelle, la procedura memorizzata può accedere / aggiornare tali tabelle. Qualsiasi SQL non elaborato che RESTRICTED tenta di utilizzare fallirà a causa di un'autorità insufficiente: l'unica cosa che può fare è chiamare le stored procedure create per lei.
Se i tuoi programmi sono archiviati nella stessa libreria dei tuoi dati, dovrai dare l'autorizzazione RESTRICTED * USE alla libreria e limitarla specificatamente (tramite * EXCLUDE) su tutte le tabelle di quella libreria. Potrebbe essere più semplice creare una libreria RISERVATA che contiene solo le procedure memorizzate e autorizzarla a quella libreria. Ciò semplifica la manutenzione in corso perché non dovrai cercare di ricordare di continuare a limitarla dalle tabelle appena create in DATA.