Hay dos razones principales (de seguridad) para hacer esto, más allá del simple uso de consultas parametrizadas:
- Cumplimiento del tipo de parámetro
- Mínimo privilegio.
El principio de privilegio mínimo requiere que usted permita que cualquier entidad (usuario o aplicación) acceda solo a lo que necesite para realizar la tarea definida. Si no restringe la aplicación web solo a los SP, la aplicación podría ejecutar cualquier consulta arbitraria.
Tenga en cuenta que esto es relevante en dos situaciones: evitar que un atacante, que logró encontrar una vulnerabilidad en su aplicación (inyección de SQL o cualquier otra vulnerabilidad que pudiera permitirle ejecutar código), ejecute consultas SQL maliciosas; y, mucho menos riesgo, los desarrolladores que buscan accesos directos inseguros y no aprobados (o incluso desarrolladores maliciosos).
Al otorgar solo los privilegios de EJECUTAR sobre los SP requeridos, evitará que la aplicación ejecute cualquier consulta que no esté predefinida.
Wrt impone los tipos de parámetros, aunque es posible implementar esto de otras maneras, esto lleva el tipo de imposición a la base de datos, pero antes de que llegue al servidor db. Es decir. usando los tipos que están en realidad definidos en la base de datos, y sin saltar accidentalmente un parámetro.
Tenga en cuenta que para hacer esto correctamente y evitar algunos errores comunes, desea:
- defina una cuenta de usuario específica para la aplicación ASP.NET
- asigne la cuenta a un personalizado rol de DB
- elimine la cuenta de todos los demás roles, como
dbo
.
- conceda privilegios EXECUTE al rol de base de datos personalizado que creó
- elimine todos los demás privilegios en los SP, tablas y otros objetos de base de datos. Esto incluye roles "públicos" predeterminados, y así sucesivamente.
- asegúrese de que la función de base de datos personalizada no tenga otros privilegios.