Seguridad en SQL Server 2005
Tabla de contenidos Modelo de Seguridad en SQL Server Inicios de Sesión - Usuarios Esquemas de Base de Datos Usuarios de Base de Datos Contexto de Ejecución Permisos a sentencias y objetos Marta Zorrilla 2009-2010 109
Modelo de Seguridad en SQL Server Solicitud de conexión de Red Conexión n con el Servidor de SQL Server Solicitud de Inicio de Sesión en SQL Server Establecer Credenciales de Inicio de Sesión Cambio a una BBDD y autorización de acceso Establecer un Contexto de Base de Datos Intento de realizar alguna acción Verificar Permisos para las acciones Marta Zorrilla 2009-2010 110
Jerarquía de Seguridad Marta Zorrilla 2009-2010 111
Inicios de sesión - Usuarios Modo de autentificación (acceso al servidor) (Inicio de sesión: Login) Windows (S.O.) Servidor SQL Server Acceso y gestión de una BD (autorización: User) Permisos a objetos de BD ejecución de sentencias Permisos a través de roles: del servidor o de BD definidos por el usuario Marta Zorrilla 2009-2010 112
Inicios de sesión preestablecidos Marta Zorrilla 2009-2010 113
Tipos de Inicios de sesión Windows Usuario Grupo de usuarios SQL Server Certificado o Clave Asimétrica Asociados a Credenciales Para acceso a recursos externos CREATE CREDENTIAL Marta Zorrilla 2009-2010 114
Tipos de Inicios de sesión (y 2) Opciones de Administración Podemos forzar el cambio de contraseña en el primer inicio de sesión: MUST_CHANGE Exigir directivas de contraseña Desbloquear Cuentas: UNLOCK Deshabilitar un inicio de sesión: DISABLE BD de conexión predeterminada Marta Zorrilla 2009-2010 115
Crear Inicios de sesión (y 3) Gráficamente SSMS CREATE LOGIN CREATE LOGIN Pepe WITH PASSWORD = Passwd' MUST_CHANGE CREATE LOGIN [UNICAN\pepe] FROM WINDOWS sys.server_principals sys.sql_logins DROP LOGIN / ALTER LOGIN Marta Zorrilla 2009-2010 116
Roles fijos de Servidor Marta Zorrilla 2009-2010 117
ROLES FIJOS DE SERVIDOR sp_addsrvrolemember /sp_dropsrvrolemember sys.server_role_members sp_srvrolepermission sys.server_permissions Marta Zorrilla 2009-2010 118
ANSI SQL-92: Esquemas Colección de objetos de la BBDD cuyo propietario es un único principal y forma un único espacio de nombres Espacio de nombres: es un conjunto de objetos que no pueden tener nombres duplicados servidor.basededatos.esquema.objeto Los objetos ahora pertenecen al esquema de forma independiente al usuario Beneficios El borrado de un usuario no requiere que tengamos que renombrar los objetos Resolución de nombres uniforme Gestión de permisos a nivel de esquema Marta Zorrilla 2009-2010 119
Seguridad de base de datos Marta Zorrilla 2009-2010 120
Conceder acceso a una BD Marta Zorrilla 2009-2010 121
ROLES FIJOS DE BASE DE DATOS Marta Zorrilla 2009-2010 122
Roles definidos por el usuario Marta Zorrilla 2009-2010 123
Definir usuario del Gestor Marta Zorrilla 2009-2010 124
Usuarios de Base de Datos Crear un Usuario CREATE USER <usuario> FOR LOGIN <login> WITH DEFAULT_SCHEMA = <schema> Podemos crear un usuario sin asociar: WITHOUT LOGIN Modificar ALTER USER Eliminar DROP USER No si es propietario de objetos Invitado GRANT CONNECT TO GUEST sys.database_principals Marta Zorrilla 2009-2010 125
Roles de Base de Datos CREATE ROLE <nombre> sp_addrolemember <role>,<usuario> sys.database_role_members Rol Public Marta Zorrilla 2009-2010 126
Definir role de BD Rol de aplicación. Un usuario que se conecta a través de una aplicación que habilita el rol de aplicación, pierde todos sus privilegios, disponiendo exclusivamente los que le ofrece este rol. Permite establecer un nivel alto de seguridad, impidiendo el acceso vía ODBC, OLEDB. Marta Zorrilla 2009-2010 127
Permisos a sentencias Para otorgar permisos a acciones. Su sintaxis es: GRANT {{ ALL ALL instrucción [[,...n,...n]]}} TO TO {usuario [[,...n,...n]] role role [[,...n,...n] ]} } instrucción instrucción (entre (entre otras): otras): CREATE CREATE {{ DATABASE DATABASE DEFAULT DEFAULT FUNCTION FUNCTION PROCEDURE PROCEDURE RULE RULE TABLE TABLE VIEW VIEW }} ALTER ALTER {{ DATABASE DATABASE DEFAULT DEFAULT FUNCTION FUNCTION PROCEDURE PROCEDURE RULE RULE TABLE TABLE VIEW VIEW }} BACKUP BACKUP DATABASE DATABASE BACKUP BACKUP LOG LOG Marta Zorrilla 2009-2010 130
Permisos a objetos Para otorgar permisos a objetos de la BD. Concede y quita permisos, inicialmente, el propietario de la BD. Su sintaxis es: GRANT {{ ALL ALL [[ PRIVILEGES ]] permiso [[,...n,...n]]}} {{ [[(( columna [[,...n,...n]]))] ] ON ON {{ tabla tabla vista vista }} ON ON {{ tabla tabla vista vista }}[[(( columna [[,...n,...n]]))] ] ON ON {{ procedimiento procedimiento_extendido }} ON ON {{ función} }} TO TO {usuario [[,...n,...n]] role role [[,...n,...n] ]} } [[ WITH WITH GRANT OPTION ]] [[ AS AS {{ usuario usuario role role }}]] permiso permiso (entre (entre otros): otros): SELECT, SELECT, INSERT, INSERT, DELETE, DELETE, UPDATE, UPDATE, EXECUTE. EXECUTE. WITH WITH GRANT GRANT OPTION: OPTION: el el usuario usuario al al que que se se le le otorga otorga permiso, permiso, puede puede a a su su vez, vez, otorgárselo otorgárselo a a otro. otro. AS AS :: usuario usuario o o role role que que establece establece el el permiso permiso Marta Zorrilla 2009-2010 131
Ejemplos GRANT Permitir a los usuarios Maria, Juan y Marta crear bases de datos y tablas GRANT CREATE DATABASE, CREATE TABLE TABLE TO TOMaria, Juan, Juan, [Servidor\Marta] Permitir a María y a Juan, insertar, modificar y borrar en la tabla autores. GRANT INSERT, UPDATE, DELETE ON ON autores autores TO TO Maria, Maria, Juan Juan Permitir a María actualizar el importe del préstamo. GRANT UPDATE( importe importe )) ON ON prestamo TO TO Maria Maria Marta Zorrilla 2009-2010 132
REVOKE (1) Para denegar permisos a acciones. Su sintaxis es: REVOKE {{ ALL ALL instrucción [[,...n,...n]]}} FROM FROM {usuario [[,...n,...n]] role role [[,...n,...n] ]} } INSTRUCCIÓN INSTRUCCIÓN (entre (entre otras): otras): CREATE CREATE {{ DATABASE DATABASE DEFAULT DEFAULT FUNCTION FUNCTION PROCEDURE PROCEDURE RULE RULE TABLE TABLE VIEW VIEW }} ALTER ALTER {{ DATABASE DATABASE DEFAULT DEFAULT FUNCTION FUNCTION PROCEDURE PROCEDURE RULE RULE TABLE TABLE VIEW VIEW }} BACKUP BACKUP DATABASE DATABASE BACKUP BACKUP LOG LOG Marta Zorrilla 2009-2010 133
REVOKE (2) Para quitar permisos. Su sintaxis es: REVOKE [[ GRANT OPTION FOR FOR ]] {{ ALL ALL [[ PRIVILEGES ]] permiso [[,...n,...n]]}} {{ [[(( columna [[,...n,...n]]))] ] ON ON {{ tabla tabla vista vista }} ON ON {{ tabla tabla vista vista }}[[(( columna [[,...n,...n]]))] ] ON ON {{ procedimiento procedimiento_extendido }} ON ON {{ función} }} {{ TO TO FROM FROM }} {usuario [[,...n,...n]] role role [[,...n,...n]]}} [[ CASCADE ]] [[ AS AS {{ usuario usuario role role }}]] GRANT GRANT OPTION OPTION FOR FOR :: se se quita quita al al usuario usuario la la capacidad capacidad de de dar dar o o quitar quitar permisos permisos que que le le fueron fueron concedidos concedidos por por la la cláusula cláusula WITH WITH GRANT GRANT OPTION OPTION permiso: permiso: SELECT, SELECT, INSERT, INSERT, DELETE, DELETE, UPDATE, UPDATE, REFERENCES, REFERENCES, EXECUTE, EXECUTE, CREATE, CREATE, etc. etc. CASCADE CASCADE :: se se quita quita el el permiso permiso al al usuario/role usuario/role y y a a los los usuarios/roles usuarios/roles a a los los que que dio dio permiso, permiso, si si se se le le concedió concedió GRANT GRANT OPTION. OPTION. AS AS :: usuario usuario o o role role que que quita quita el el permiso permiso Marta Zorrilla 2009-2010 134
Ejemplos REVOKE Impedir a los usuarios Maria y Marta crear vistas en la BD activa. REVOKE CREATE VIEW VIEW TO TOMaria, [Servidor\Marta] Impedir que María ejecute la función dameprecio. REVOKE SELECT ON ON dbo.dameprecio TO TO Maria Maria Marta Zorrilla 2009-2010 135
Permisos efectivos Marta Zorrilla 2009-2010 136
A tener en cuenta SQL Server establece el rol PUBLIC a todos los usuarios de la BD. Para aquellos usuarios que no tienen cuenta en la BD, pero sí acceso al gestor, pueden conectarse a la BD como GUEST, si este usuario está habilitado en ella (GRANT CONNECT TO GUEST). Se ha de tener cuidado respecto a la manera en que se establecen las autorizaciones, si se quiere garantizar que luego se puedan quitar. U1 U5 Admon U2 U4 U3 Marta Zorrilla 2009-2010 137
Limitaciones de seguridad No se puede establecer privilegios a nivel de fila (p. ej. cada alumno sólo vea sus notas) Hay extensiones para proporcionar control de acceso en el nivel de las filas y para trabajar con gran número de usuarios pero aún no están normalizadas. Utilizar vistas para restringir la información. Establecer la seguridad en aplicaciones de BD: - Usuarios Usuarios de domino / de gestor con sus privilegios Usuarios de dominio / de gestor con rol de aplicación Usuario único con privilegios - Crear BD de seguridad donde se establece con detalle las acciones que cada usuario de aplicación puede hacer Código de aplicación se entremezcla con el de autorización Más difícil de garantizar la existencia de agujeros de seguridad Marta Zorrilla 2009-2010 138
Estrategias de seguridad Marta Zorrilla 2009-2010 139
Estrategias de seguridad (y 2) Marta Zorrilla 2009-2010 140