Gestire tutte le logiche di autenticazione nel database o nel codice?

1

Stiamo iniziando un nuovo progetto (ish) al lavoro che mi è stato dato. Un sacco di materiale lato database è stato arricchito, incluse alcune stored procedure. Una delle stored procedure, ad esempio, gestisce la creazione di un nuovo utente. Tutti i dati sono convalidati nella stored procedure (ad esempio, la password deve essere lunga almeno 8 caratteri, deve contenere numeri, ecc.) E altre cose, come l'hashing della password, vengono eseguite anche nel database.

È normale / giusto che tutto venga gestito nella stored procedure anziché nell'applicazione stessa?

È bello che qualsiasi applicazione possa utilizzare la stored procedure e avere la stessa validazione, ma l'applicazione dovrebbe avere una funzione standard framework / API che risolva lo stesso problema. Mi sembra anche che tolga i dati dall'applicazione e sarà più difficile mantenere / aggiungere nuove funzionalità a.

    
posta Snuffleupagus 12.06.2012 - 21:40
fonte

2 risposte

5

No, non è tipico che una stored procedure gestisca tutta la convalida dei dati. Dalle mie osservazioni, le stored procedure dovrebbero usare le asserzioni come ultima linea di difesa contro i cattivi dati. Come assicurarsi che i dati di stringa non superino la lunghezza dei caratteri n per un campo particolare. Roba come la password deve soddisfare determinati criteri come avere almeno 1 carattere speciale, 1 numero e non avere spazi di solito viene gestita nel livello dell'applicazione. Il livello dell'applicazione dovrebbe fare il lavoro di validazione principale prima che i dati arrivino alla stored procedure.

    
risposta data 12.06.2012 - 21:50
fonte
1

C'è una logica che deve vivere nel database, come il controllo di unicità di RI e PK.

Il punto buono della logica aggiuntiva nel livello dati è che la creazione di codice nelle stored procedure semplifica il codice client in modo significativo e può farti dimenticare completamente una rottura centrale se la scalabilità non è la preoccupazione principale. Potrebbe anche ridurre gli spostamenti tra il codice chiamante e il database negli "scenari / casi felici". Inoltre, come hai identificato, consente "all'azienda" di condividere la logica. Lo svantaggio è che, più codice inserisci nel tuo livello dati, più la tua applicazione sarà legata al database e al suo fornitore. Avrai bisogno dell'abilità sia nella parte anteriore che nel rovescio della tua squadra. Se la tua squadra è OO centric, potrebbero non godere della natura procedurale SP. Ad esempio, potrebbe essere necessario sostituire la facilità di utilizzo degli oggetti in LINQ per l'utilizzo dell'esperienza in SQL. Penso anche che quando hai memorizzato la procedura molti non sono in grado di scalare la tua applicazione aggiungendo server di database, ma non sono sicuro su questo punto. Se questa è una preoccupazione, potrebbe essere necessario ricercarla. Potresti anche essere interessato a questo post: argomenti-per-contro-affari -logic-in--stored procedure

Modifica, Può valere la pena ricordare che il controllo della versione può essere più difficile con il codice distribuito in più di un ambiente.

    
risposta data 12.06.2012 - 22:23
fonte

Leggi altre domande sui tag