2009-02-17 14 views
13

Mi chiedo quali tecniche si utilizzano per memorizzare le credenziali del database per l'applicazione. Sono specificamente interessato alle webapp java, ma non penso che sia necessario limitare le domande a questo.Dove memorizzare le credenziali del database in un'app Web?

cose da considerare:
Usi file di proprietà, configurazioni xml, altro?
È integrato nell'applicazione (ad esempio in un file jar) o memorizzato separatamente nel file system da qualche parte?
La password è crittografata? In tal caso, quale schema di crittografia utilizzi?

risposta

5

Con Java, i pool di connessione del database devono essere trasferiti nelle applicazioni web dal contenitore. Questo è nello standard dichiarabile in WEB-INF/web.xml come risorse. Lo stesso vale per le sessioni di posta e altre risorse esterne che possono variare dall'installazione all'installazione. Cerca JNDI per ulteriori informazioni su questo)

La parte interessante è che l'applicazione non si preoccupa di come connettersi effettivamente a qualcosa all'esterno. Non vedrà alcuna password, perché il contenitore stesso le utilizzerà.

In tomcat questo viene configurato dai file di contesto (ad esempio) in conf/Catalina/localhost /, conf/server.xml o - preferibilmente solo per ambienti di sviluppo, dalle applicazioni web META-INF/context.xml. Altri ambienti hanno la propria posizione o applicazione di configurazione.

La crittografia delle password dipende in realtà dal contenitore. Tomcat li memorizza in testo normale, ma l'applicazione stessa non la vedrà. Non conosco la meccanica in altri ambienti.

3

Dipende dal server dell'app.

Di solito utilizzo le ricerche JNDI per l'origine dati, quindi le credenziali vengono memorizzate sul server delle app che gestisce il pool di connessioni. Non c'è bisogno di mettere altro che il nome JNDI nella configurazione in questo modo.

Sì, la password è crittografata su WebLogic.

Su Tomcat le cose possono essere rischiose. Le informazioni di connessione sono in META-INF/context.xml, che significa testo semplice per la password. Lo faccio solo per lo sviluppo, mai in produzione.

8

Dato che stai lasciando aperta la domanda alla piattaforma, aggiungerò che le credenziali del database per le app .NET sono memorizzate nel file web.config. Dalla versione 2.0 e successive, esiste una sezione ConnectionStrings specifica che consente un accesso programmatico più semplice alla stringa di connessione.

Oltre a fare in modo che IIS blocchi automaticamente le richieste dirette al file web.config per impostazione predefinita, è anche possibile utilizzare un comando IIS per crittografare la sezione ConnectionString del file web.config. Questa crittografia è specifica per la macchina, che si aggiunge ai suoi punti di forza, e il runtime .NET decrittografa anche la stringa di connessione al volo quando ci si accede, quindi non c'è bisogno di ulteriore codifica nell'applicazione per lavorare con esso.

4

Nello stack Microsoft, le cose possono essere molto belle.

Si crea un account utente di rete in Active Directory con quasi nessuna autorizzazione. Configurare IIS per eseguire la tua webapp come quell'utente. Concedi a quell'utente l'accesso in lettura alle cartelle Web e ai file sul disco. Configurare SQL Server per concedere all'utente le autorizzazioni di lettura/scrittura sulle tabelle desiderate. E nella stringa di connessione, istruisci il client db a connettersi come l'account utente su cui viene attualmente eseguita la webapp.

C'è solo un account utente effettivo, sebbene sia visibile in più posizioni. Questo account utente ha permessi estremamente limitati. Non è possibile memorizzare password ovunque, anche se crittografate. Non c'è alcuna configurazione che deve essere eseguita nel codice affinché funzioni (è tutto nella configurazione delle autorizzazioni).

1

In Django, le credenziali sono nel file di configurazione settings.py. Poiché questo non è generalmente mantenuto nell'albero di directory /var/www/, è molto sicuro.

Inoltre, una singola applicazione Django può essere utilizzata (e riutilizzata) per molti siti Web o server Web sullo stesso host, ciascuno con le proprie impostazioni specifiche. Pertanto, la configurazione dello settings.py non è inclusa nell'app, ma fa parte di un'unica distribuzione dell'app.

1

Per asp.net:

I memorizzare i parametri globali come la stringa di connessione e percorsi di repository nel Registro di sistema e poi un riferimento alla voce di registro nel web.config.

Il motivo principale è che spesso trovo che devo scrivere un eseguibile autonomo per eseguire attività in background e altre funzionalità automatizzate che richiedono l'accesso agli stessi parametri. Pertanto, mantenere tutto ciò che è veramente globale in un luogo facilmente accessibile facilita la vita.

0

Quali di questi sono buoni posti per mantenere le credenziali del database dell'app Web? In un file separato nel codice sorgente In un file separato sull'host del server Web Nel database Nessuno. Le credenziali del database non dovrebbero mai essere archiviate

+0

Quindi, come mai la tua applicazione si collega al database se non ci sono file sul server con le credenziali? – thenetimp

Problemi correlati