Quali sono i vantaggi per la sicurezza in un database utente separato?

13

Nell'app che sto scrivendo ho separato l'utente e il database principale molto tempo fa per "ragioni di sicurezza". Tuttavia sta diventando sempre più difficile giustificare il sovraccarico e la difficoltà di gestire tale impostazione.

Per alcuni dettagli rapidi questa è un'app web PHP. Ci sono 2 connessioni mysqli separate, una per ogni database. Ogni database ha il proprio utente con le proprie credenziali. Ciò significa che non è possibile accedere al database principale con le credenziali del database utente

In teoria ciò previene il danno da SQL injection, la separazione di preoccupazioni, la sicurezza attraverso l'oscurità, ecc. Tuttavia, in termini di costi e benefici, perdo facilmente l'interoperabilità con la tabella utente e il resto del database, ad esempio joins.

Ci sono ragioni più concrete per cui una tale impostazione del database ha senso? È comune?

    
posta TheLQ 02.01.2012 - 21:02
fonte

3 risposte

15

Piuttosto che due connessioni separate che funzionano insieme, è possibile utilizzare account utente separati con accesso a colonne specifiche. La maggior parte delle tue dichiarazioni può utilizzare l'account utente che ha accesso solo alla colonna username (non password) della tabella utenti e i dati meno importanti dal tuo db principale.

In MySQL, puoi farlo con una buona granularità. Ciò ti consentirà di mostrare i nomi utente di tutti e di accedere solo alle password nelle pagine di accesso e di accedere solo alle sessioni nella gestione delle sessioni, accedere solo agli indirizzi email dei notificanti, ecc.

Con questo modello, le Iniezioni SQL saranno generalmente limitate alle informazioni pubbliche o alla singola sezione che raggiungono.

Ovviamente, ciò che è pubblico, come sono impostati i tuoi utenti, quanti, ciò che ottengono è tutto specifico per il tuo caso d'uso.

Controlla la documentazione di GRANT per la tua versione di MySQL.

Dichiarazione di non responsabilità: questa non è una correzione per SQL Injection, solo uno sforzo per aiuto riduce al minimo l'impatto.

    
risposta data 02.01.2012 - 22:42
fonte
3

se l'app che accede ai due diversi DB è la stessa, la separazione dei DB non è così utile. Complicano OGNI fase di programmazione e domande relative ai DATI. Preferirei una separazione logica invece della separazione fisica dei dati.

È lo stesso con due casseforti: se hai le 2 chiavi nello stesso posto, quanta sicurezza è per le due casseforti?

L'equilibrio "usabilità vs sicurezza" qui perde molta più usabilità rispetto alla sicurezza.

    
risposta data 05.01.2012 - 08:24
fonte
1

Dipende .....

Ad esempio i PIN del negozio bancario nel proprio database, sul proprio server. Il server elimina automaticamente i dati se qualcuno tenta di rimuoverlo dal rack.

Una buona ragione per un database separato è se si desidera essere in grado di ottenere che i clienti vi inviino il database quando colpiscono un bug. Se il database non contiene alcuna password potrebbero esserci meno problemi.

Penso che un database separato abbia senso solo se ti permette di gestire i due database in un modo diverso.

    
risposta data 27.06.2015 - 15:11
fonte

Leggi altre domande sui tag