domingo, 28 de junio de 2009

Conceptos de seguridad en SQL Server

El manejo de la seguridad en SQL SERVER 2005 se basa en tres entidades, Principales, Permisos y asegurables

Los principales son todos aquellos objetos a los cuales se les colocan permisos para acceder a los asegurables.

Ejemplos de principales son : Grupos de windows, Cuentas de dominio, usuario locales, Logins de sql, roles de servidor, roles de base de datos, role de aplicación y usuarios

Los asegurables son aquellos objetos que son utilizados por los principales. Existen tres tipos de niveles de asegurables.

Nivel de servidor
*Logins
*Endpoints
*Databases

Nivel de Base de datos
*Usuarios
*Roles
*Roles de aplicación
*Certificados
*Llaves simetricas
*Llaves asimetricas
*Ensamblados
*Catálogos de Full-test
*Eventos DDL
*Esquemas

Nivel de esquema
*Tablas
*Vistas
*Funciones
*Procedimientos
*Tipos
*Sinonimos
*Agregados

Noten que por ejemplo los Roles son principales y asegurables a la vez.

Los permisos controlan el acceso de los principales a los asegurables, estos se pueden otorgar, revocar o denegar

Siempre el permiso denegar tiene mayor preferencia que los otros permisos, con excepción cuando se deniega el permiso sobre un tabla pero se otorga en una columna

Otorgar permisos

GRANT ALL [ PRIVILEGES ] permission [ ( column [ ,...n ] ) ] ON [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ] TO [ ,...n ] [ WITH GRANT OPTION ] [ AS ]

La opción ALL otorga los siguientes permisos teniendo en cuenta ANSI-92

*Permisos de función escalar: EXECUTE y REFERENCES.
*Permisos de función con valores de tabla: DELETE, INSERT, REFERENCES, SELECT y UPDATE.
*Permisos de procedimiento almacenado: EXECUTE, SYNO
NYM, DELETE, INSERT, SELECT y UPDATE.
*Permisos de tabla: DELETE, INSERT, REFERENCES, SELECT y UPDATE.
*Permisos de vista: DELETE, INSERT, REFERENCES, SELECT y UPDATE.

La opción PRIVILEGES se coloco por compatibilidad con versiones anteriores

La opción WHIT GRANT OPTION indica que el principal también podrá otorgar el mismo permiso a otros principales

Ejemplo: Asignar al usuario julio permiso sombre la tabla empleados en la base de datos prueba

USE Prueba
GRANT SELECT ON OBJECT::DBO.EMPLEADOS TO JULIO
GO

Asignar al usuario julio permiso de lectura sobre el campo EmployeeID de la tabla empleados con WHIT GRANT OPTION

USE Prueba
GRANT SELECT (EmployeeID) ON OBJECT::DBO.EMPLEADOS TO JULIO WITH GRANT OPTION
GO

Denegar permisos

DENY ALL [ PRIVILEGES ] permission [ ( column [ ,...n ] ) ]ON [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ] TO [ ,...n ] [ CASCADE ] [ AS ]

La opción CASCADE indica que también se denegara el permiso a las entidades a las cuales el principal le otorgo el permiso

Ejemplo: Denegar al principal julio el permiso de insertar sobre la tabla empleados de la BD prueba

USE Prueba
DENY INSERT ON OBJECT::DBO.EMPLEADOS TO JULIO CASCADE
GO

Revocar permisos

REVOKE [ GRANT OPTION FOR ] [ ,...n ] ON [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ] { FROM TO } [ ,...n ] [ CASCADE ] [ AS ]

Ejemplo: Quitar el permiso de ejecución del procedimiento almacenado ActualizarSalario de la BD Prueba al usuario julio

USE Prueba
REVOKE EXECUTE ON OBJECT::dbo.ActualizarSalario FROM julio
GO

Los permiso que se pueden otorgar, revocar y denegar a un asegurable son:

*Control: Da al principal todos los privilegios que tiene el propietario sobre el asegurable
*Alter: Tiene todos los privilegios con excepción de tomar propiedad de un asegurable
*Take Ownership: tomar propiedad del asegurable
*Create: Permite al principal crear asegurables
*View definition: permite ver la sentencias T-SQL con las cuales fueron creadas los asegurables
*Select: Permite al principal leer datos sobre el asegurable
*Insert: Permite al principal insertar datos sobre el asegurable
*Update: Permite al principal modificar datos sobre el asegurable
*Delete: Permite al principal borrar datos sobre el asegurables
*Reference:
*Execute:
Permite al principal ejecutar asegurables

1 comentario:

  1. Estimado, hay algun SP o conjunto de SP que nos puedan ayudar a restringuir solo el acceso de algunos usuarios al SQL Management Studio?, esto porque si el usuario no tiene el Server Roll de sysadmin lo deja entrar al Mgmt, que se puede hacer

    ResponderEliminar