Sicurezza per gli sviluppatori di applicazioni che eseguono PL / SQL in Oracle


13

Come gestite la mancanza di privilegi a livello di schema in Oracle? L'architettura di sicurezza di Oracle funziona bene per le applicazioni che richiedono solo privilegi a livello di oggetto e funziona bene per i DBA che richiedono poche restrizioni. Tuttavia, sembra esserci un grande buco nell'architettura per i programmatori che fanno sviluppo con un'applicazione front-end e PL / SQL in più schemi. Ecco alcune delle mie opzioni con i loro lati negativi:

  1. Fai in modo che ogni programmatore esegua lo sviluppo nel proprio schema. Il DBA concederà privilegi a livello di oggetto ai programmatori che ne hanno bisogno. Qualsiasi sviluppo di pacchetti deve essere eseguito da un DBA. Il principale svantaggio è che i programmatori useranno il database come un secchio a scapito delle prestazioni del database. Voglio che i programmatori si sviluppino nel database, ma questo metodo lo scoraggerebbe notevolmente.

  2. Assegnare a ciascun programmatore il nome utente / la password per la dozzina di schemi in cui è necessario eseguire lo sviluppo. Concedere queste autorizzazioni per lo schema dell'applicazione per creare procedure, tabelle, ecc. Alcuni degli svantaggi di questo approccio sono che i programmatori devono mantenere più accessi e raramente effettuato l'accesso come se stessi. Anche lo sviluppo di schemi incrociati è difficile.

  3. Concedere ai programmatori i privilegi di autenticazione proxy su ogni schema per il quale devono eseguire lo sviluppo. Ciò li mantiene registrati come se stessi senza dover concedere loro privilegi diversi dal privilegio proxy. Gli svantaggi includono i programmatori che devono mantenere connessioni separate per ogni schema per cui sono proxy, lo sviluppo dello schema incrociato è più complicato poiché le connessioni devono essere costantemente modificate e i pacchetti che utilizzano collegamenti a database pubblici con autenticazione passata non verranno compilati all'interno di connessioni proxy.

  4. Assegna a ciascun programmatore i privilegi DBA. - L'aspetto negativo qui è la sicurezza. Nessun programmatore di schemi può essere tenuto fuori da qualsiasi schema e qualsiasi programmatore può impersonare qualsiasi altro programmatore (DBA).

Sembra che manchi un'opzione per concedere a ciascun programmatore SELECT / INSERT / CREATE / etc. privilegi sullo schema di cui hanno bisogno per fare lo sviluppo. Accedono come se stessi per fare il loro lavoro usando una connessione. I nuovi oggetti nello schema a cui hanno accesso sono immediatamente disponibili.

Mi sto perdendo qualcosa? Come gestite i programmatori di applicazioni che eseguono lo sviluppo PL / SQL?


3
+1 grande domanda: questo, insieme alla mancanza di controllo del codice sorgente integrato, è un grosso problema con Oracle in un ambiente multi-sviluppatore.
ScottCher,

Risposte:


11

Ai tempi in cui lavoravo in un negozio Oracle, avevamo un server "dev" (sviluppo) specifico, che aveva restrizioni di sicurezza diverse rispetto al server "prod" (produzione). Gli sviluppatori potevano fare tutto ciò di cui avevano bisogno e quindi passavamo gli script necessari al DBA per applicarli al server di produzione.

Nel caso dei nostri sistemi critici (SCT Banner, per il monitoraggio di classi e studenti e Oracle Financials), c'erano anche server "test" e "seed". Il test era per il test di accettazione da parte dell'utente prima che le cose migrassero da dev a prod; 'seed' era l'installazione stock del software, quindi dovremmo trovare un bug, potremmo verificare se fosse qualcosa che avevamo introdotto o proveniva da SCT o dal software Oracle.


+1 Con il nostro database di uso generale, gli sviluppatori lavorano su progetti molto diversi, quindi il principio del privilegio minimo non darebbe loro accessi completi anche al server di sviluppo. ( en.wikipedia.org/wiki/Principle_of_least_privilege )
Leigh Riffel,

@Leigh - Probabilmente avrei dovuto chiarire ... il server dev è caduto sotto quello che avevi come n. 1 per la maggior parte, non n. 4
Joe

1
Ricordo di aver clonato i database DEV dalla produzione, quindi complicate sovvenzioni per consentire agli sviluppatori di lavorare senza restrizioni. Alla fine è stato più semplice fornire a ciascuno sviluppatore il proprio database e l'accesso DBA. Avrebbe quindi inserito le modifiche in Dev tramite un ciclo di rilascio. Ora dovrebbe essere più facile con la virtualizzazione.
Sumnibot,

@Sumnibot: più facile da installare per mantenere, eseguire il backup, ecc. Di un database separato per ogni sviluppatore che concedere loro le autorizzazioni!?! Oltre al tempo necessario per mantenere aggiornati tutti questi aspetti, sembrerebbe che i costi delle licenze sarebbero considerevoli o non hai fornito loro la versione aziendale?
Leigh Riffel,

1
Non contiene una risposta concreta per me.
Michael-O,

3

Utilizzare i ruoli per associare raccolte di oggetti, quindi concedere l'accesso ai ruoli

L' istruzione GRANT consente al DBA di:

Privilegi di un oggetto specifico per utenti, ruoli e PUBBLICO. La Tabella 18-2 elenca i privilegi degli oggetti e le operazioni che autorizzano.

Poiché i privilegi di oggetto possono essere concessi a un ruolo, è relativamente facile concedere a un ruolo l'accesso a tutte le tabelle in uno schema:

sql> spool privs.sql
sql> select 'grant select on scott.' || nome_tabella || ' to role_select; ' da dba_tables dove owner = 'SCOTT';
SQL> @ privs.sql
sql> grant role_select a john, sam, peter;

Ciò, combinato con il GRANT CREATE TABLErilascio da parte dell'utente appropriato dello schema al ruolo, consente agli sviluppatori di selezionare e creare tabelle. Non è perfetto poiché una tabella creata richiede di eseguire nuovamente lo script, ma WITH GRANT OPTIONsuggerisce che ogni sviluppatore possa quindi concedere l'accesso alla tabella creata per il ruolo appropriato.

Ciò suggerisce che è possibile creare trigger di livello DDL in grado di eseguire il processo di concessione appropriato, anche se ovviamente saranno necessarie quantità significative di test, dovrebbe essere possibile fare in modo che l'istruzione create table conceda automaticamente le autorizzazioni appropriate ai ruoli appropriati.

Modificare --

Secondo GRANT , il CREATE TABLEprivilegio:

Creare una tabella nello schema del beneficiario.

Pertanto, dando loro la creazione di una tabella, una modifica della tabella, ecc. Da parte dell'utente corretto, dovrebbero essere in grado di accedere allo schema di quell'utente come se fossero l'utente appropriato.


Ho visto la metodologia a cui fai riferimento senza aver avuto molto successo; tuttavia, credo che tu abbia ragione nel dire che potrebbe essere fatto con test approfonditi. Il problema è che ciò consente solo agli sviluppatori di selezionare l'accesso sui tavoli. Concedere la creazione della tabella direttamente o tramite un ruolo consente loro di creare i privilegi di tabella sul proprio schema. Non sono ancora in grado di creare tabelle, procedure, pacchetti, trigger o altri oggetti in qualsiasi schema tranne il proprio, o è il punto che dovrebbero creare oggetti nel proprio schema solo durante lo sviluppo?
Leigh Riffel,

@Leigh Aggiornato con i dettagli.
Brian Ballsun-Stanton,

Questo non è il modo in cui Oracle funziona. Prova questo: crea l'utente u1 identificato da "ThisIsMy1Password"; creare l'utente u2 identificato da "ThisIsMy1Password"; concedi dba a u1; concedi connettiti a u2; connect u1 / "ThisIsMy1Password" @db; concedi crea tabella a u2; connect u2 / "ThisIsMy1Password" @db; crea la tabella u1.t1 (c1 varchar2 (10)); L'ultimo passaggio ha esito negativo con privilegi insufficienti.
Leigh Riffel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.