Te presento mi nuevo sitio web: "El Futuro de los Datos"

Aunque SQL Server Si!, seguirá activo, iré bajando la frecuencia de publicación.
Si quieres conocer todas las novedades que vaya publicando, te recomiendo que lo visites y te suscribas. Tengo un regalito para mi audiencia:

Tu primer Dashboard en "piloto automático" listo en 30 minutos
Sólo para suscriptores.
.

5 nov. 2009

Accede a las tablas mediante procedimientos almacenados, nunca directamente

Es una práctica muy habitual que muchos usuarios tengan acceso a las tablas. En muchas ocasiones simplemente necesitan utilizar una aplicación, con la que deben gestionar y mantener datos. Otras veces son los propios desarrolladores que lanzan instrucciones INSERT, UPDATE o DELETE sobre ellas, asumiendo un alto riesgo sobre la integridad de los datos.

En muchos sitios hemos leído que es una buena práctica de seguridad que no se tenga acceso directo a las tablas y que sólo se de acceso a vistas y procedimientos almacenados. Mi recomendación va más a allá, y es dar sólo acceso a procedimiento almacenados (cuando sea posible).

El problema o las razones que me suelen argumentar es el trabajo que esto supone, pero no es así:

- La creación de los procedimientos almacenados para Insert, Update y Delete, se puede automatizar con los muchos generadores que hay, o haciendo el nuestro propio.

- Luego hay que gestionar la seguridad, y es una lata tener que ir dando permisos para que pueda ejecutar cada usuario todos los procedimientos almacenados de la aplicación. Por ejemplo si tenemos 50 tablas, habrá como mínimo 200 procedimientos almacenados, contando que por cada tabla haya sólo una Insert, una Update, una Delete y una Select, cosa que no es cierta, y este número sería mayor.

Además deberíamos tener ciertas reglas de negocio en los procedimientos almacenados, esto complica un poco más su creación, pero si no lo hacemos, tendremos un gran riesgo en cualquier actualización manual que tengamos que hacer sobre las tablas.

Bueno, ¿y por qué os cuento todo esto? pues porque una de las dos tareas que aparentemente son tediosas, la de dar permisos a cada usuario para que pueda ejecutar todos los procedimientos almacenados, es muy simple, podéis utilizar el procedimiento almacenado spGrantExectoAllStoredProcs, que podéis encontrar en MS SQL Tips (un excelente sitio, que os recomiendo seguir).

Espero que esto ayude a convenceros de poner en práctica las buenas prácticas comentadas anteriormente :-)

Google