Ci sono due ragioni principali (di sicurezza) per fare ciò, al di sopra e al di là dell'utilizzo di query parametriche:
- Applicazione del tipo di parametro
- Minimo privilegio.
Il principio del privilegio minimo richiede che qualsiasi entità (utente o applicazione) acceda solo a qualunque cosa sia necessaria per eseguire l'attività definita. Se non si limita la webapp solo agli SP, l'applicazione potrebbe potenzialmente eseguire query arbitrarie.
Si noti che ciò è rilevante in due situazioni: impedire a un utente malintenzionato, che è riuscito a trovare una vulnerabilità nella propria applicazione (o SQL injection, o qualsiasi altro vuln che potrebbe consentirgli di eseguire codice), dall'esecuzione di query SQL dannose; e, molto meno rischi, gli sviluppatori alla ricerca di scorciatoie non protette e non approvate (o anche di sviluppatori malintenzionati).
Concedere i privilegi di solo EXECUTE sugli SP richiesti, impedirà all'applicazione di eseguire query che non sono state predefinite.
I tipi di parametri di forzatura wrt, mentre è possibile implementarlo in altri modi, questo porta l'applicazione di tipo al database, ma prima che colpisca il server db. Cioè utilizzando i tipi effettivamente definiti nel database e senza saltare saltuariamente un parametro.
Si noti che per fare ciò correttamente ed evitare alcuni errori comuni, si desidera:
- definisce un account utente specifico per l'applicazione ASP.NET
- assegna l'account a un ruolo personalizzato DB
- rimuovi l'account da tutti gli altri ruoli, ad esempio
dbo
.
- concedere i privilegi EXECUTE al ruolo DB personalizzato creato
- rimuove tutti gli altri privilegi su SP, tabelle e altri oggetti DB. Ciò include i ruoli predefiniti "pubblici" e così via.
- assicurati che il ruolo DB personalizzato non abbia altri privilegi.