Questa sicurezza logica / prestazioni è o no?

2

Ogni utente fisico avrà circa 20 tabelle nel database.

Quando un nuovo utente si registra, verranno create altre 20 tabelle con accesso solo per il loro nuovo account MySQL.

I dati non devono essere condivisi tra gli utenti.

Questa logica è più sicura che avere solo 20 tabelle per tutti gli utenti? E per quanto riguarda le prestazioni saranno morti o no?

Modifica

Voglio solo essere sicuro che un utente a cui piace "giocare" con le iniezioni e che non riesca ad accedere ad altri dati utente.

    
posta Stelios Joseph Karras 08.08.2012 - 13:39
fonte

2 risposte

2

Questo è un pessimo design (o nessun disegno per nulla).

Dovresti modellare le tabelle come se crei le classi nella programmazione orientata agli oggetti: ogni classe / tabella rappresenta un concetto, quindi dovresti avere una tabella Utente e alcune autorizzazioni su altre tabelle per ogni utente.

Merise è un ottimo metodo per progettare il database (e molto altro, ma è usato principalmente per progettare database al giorno d'oggi). Temo che sia un'eccezione culturale francese, poiché nessun altro paese sembra utilizzarlo, ma se riesci a trovare risorse nella tua lingua sarebbe di grande aiuto per i tuoi progetti.

    
risposta data 08.08.2012 - 14:17
fonte
2

Poiché si tratta di sicurezza .stackexchange.com, mi concentrerò sulla domanda di sicurezza. (Sono d'accordo con altri poster / commentatori: questo in genere non è un buon progetto per la manutenibilità a lungo termine, probabilmente non è grandioso per le prestazioni, ma è impossibile sapere senza sapere esattamente come gli utenti - incluso te, l'amministratore - stanno interrogandoli. )

Da un punto di vista della sicurezza, la separazione dei dati utente in diverse tabelle in MySQL avrà un vantaggio solo se si configurano anche account utente individuali per ciascun utente in MySQL e quindi si impostano esplicitamente le loro autorizzazioni in modo che possano accedere solo a tali tabelle. A quel punto, le autorizzazioni diventano un enorme casino per tenere traccia, validare e correggere, ma attenuerebbe il rischio di un attacco SQL injection .

Sarebbe concettualmente più facile dare a ciascun utente il proprio schema (o "database" in linguaggio MySQL) e dare loro i privilegi per il loro intero schema. Ciò rende i privilegi molto più facili da controllare e attenua ancora il rischio di SQL injection.

Quest'ultimo concetto non è del tutto insano: molti server sono configurati in questo modo per poter eseguire diverse applicazioni con backup di database sullo stesso server senza consentire loro di accedere ai reciproci dati. Se nel tuo caso ha senso, dipende, in larga misura, da quanti utenti hai.

Non sto approvando il tuo design; solo sottolineando i pro / contro.

    
risposta data 08.08.2012 - 18:20
fonte

Leggi altre domande sui tag