Compartir a través de


Conceder permisos por filas en SQL Server (ADO.NET)

Actualización: November 2007

En algunos casos, existe un requisito para controlar el acceso a un nivel más detallado que el que se deriva simplemente de conceder, revocar o denegar permisos en los datos. Por ejemplo, una aplicación de base de datos de un hospital puede almacenar información de pacientes en una única tabla. Puede ser necesario restringir a los médicos el acceso a cierta información relacionada con sus propios pacientes. Casos similares se producen en muchos ámbitos, como en aplicaciones finacieras, legales, gubernamentales y militares. Sin embargo, SQL Server no admite la implementación de seguridad por filas. Debe crear columnas adicionales en las tablas que definan mecanismos de filtrado de filas.

Implementar permisos por filas

Los permisos por filas se utilizan en aplicaciones que almacenan información en una única tabla. Cada fila tiene una columna que define un parámetro diferenciador, como un nombre de usuario, una etiqueta u otro identificador. A continuación, se deben crear procedimientos almacenados parametrizados pasando el valor apropiado. Los usuarios pueden ver únicamente las filas que coinciden con el valor proporcionado.

Los siguientes pasos describen cómo configurar permisos por filas basándose en nombre de inicio de sesión y usuario.

  • Crear la tabla agregando una columna adicional para almacenar el nombre.

  • Crear una vista que tenga una cláusula WHERE basada en la columna de nombre de usuario. De esta forma se limitan las filas devueltas a aquellas con el valor especificado. Utilice una de las funciones integradas para especificar un usuario de la base de datos o un nombre de inicio de sesión. Con ello se elimina la necesidad de crear vistas diferentes para usuarios distintos.

    ' Returns the login identification name of the user.
    WHERE UserName = SUSER_SNAME()

    ' USER_NAME or CURRENT_USER Return the database user name.
    WHERE UserName = CURRENT_USER()
  • Crear procedimientos almacenados para seleccionar, insertar, actualizar y eliminar datos en la vista, no en las tablas base. La vista proporciona un filtro que restringe las filas devueltas o modificadas.

  • Para los procedimientos almacenados que insertan datos, capturar el nombre de usuario utilizando la misma función especificada en la cláusula WHERE de la vista e insertar dicho valor en la columna UserName.

  • Denegar todos los permisos en las tablas y vistas a la función public. Los usuarios no podrán heredar permisos de otras funciones de base de datos porque la cláusula WHERE está basada en nombres de inicio de sesión o usuarios, no en funciones.

  • Conceder permisos EXECUTE en los procedimientos almacenados a funciones de bases de datos. Los usuarios sólo pueden obtener acceso a datos a través de los procedimientos almacenados proporcionados

Recursos externos

Para obtener más información, vea el siguiente recurso.

Implementing Row- and Cell-Level Security in Classified Databases Using SQL Server 2005 , en el sitio web de SQL Server TechCenter.

Describe cómo utilizar seguridad por filas y celdas para satisfacer los requisitos de seguridad de bases de datos clasificadas.

Vea también

Conceptos

Escenarios de seguridad de aplicaciones en SQL Server (ADO.NET)

Administrar permisos con procedimientos almacenados en SQL Server (ADO.NET)

Escribir SQL dinámico seguro en SQL Server (ADO.NET)

Otros recursos

Proteger aplicaciones de ADO.NET

Información general sobre seguridad de SQL Server (ADO.NET)