Sie sind auf Seite 1von 32

3.

4 DEFINICIN DEL ESQUEMA DE SEGURIDAD

Jerarqua de Seguridad
Entidades de seguridad: Usuarios windows, usuarios sql server, Usuarios de BD. Asegurables: recursos que pueden ser protegidos.

Modos de autenticacin de SQL Server 2008


Para poder acceder a los datos de una base de datos, un usuario tiene que pasar a travs de 2 niveles de autenticacin: uno en el nivel de SQL Server y el otro en el nivel de base de datos. Estos 2 niveles son implementados usando nombres de logias y cuentas de usuario, respectivamente. Un login valido es requerido para conectarse al SQL Server y una cuenta de usuario valido es requerida para acceder a una base de datos.

Login: Un nombre de login vlido es necesario para conectarse a una instancia de SQL Server. Un login puede ser:

Un login de Windows NT/2000/2003 que ha sido concedido el acceso a SQL Server. Un login de SQL Server, que es manejado dentro del SQL Server.

Estos nombres de login son manejados dentro de la base de datos master.

User: Una cuenta de usuario vlida dentro de una base de datos es requerida para acceder a esta base de datos. Las cuentas de usuario son especficas a una base de datos. Todos los permisos y los propietarios de los objetos son controlados por la cuenta de usuario. Los logins de SQL Server son asociados con estas cuentas de usuarios. Un login puede tener usuarios asociados en diferentes bases de datos, pero nicamente un usuario por base de datos. Autenticacin de Windows. Cuando un usuario se conecta a travs de una cuenta de usuario de Microsoft Windows, SQL Server valida el nombre de cuenta y la contrasea con el token de la entidad de seguridad de Windows del sistema operativo. ste es el modo de autenticacin predeterminado, y es mucho ms seguro que el modo mixto. La autenticacin de Windows utiliza el protocolo de seguridad Kerberos, cumple la directiva de contraseas en lo que respecta a la validacin de la complejidad de las contraseas seguras y permite el bloqueo de las cuentas y la expiracin de las contraseas. Autenticacin de SQL Server. Modo de autenticacin de SQL Server. Su finalidad es ofrecer compatibilidad con versiones anteriores a aplicaciones y usuarios que necesiten acceso a SQL Server con una cuenta de usuario y contrasea especfica. Es el modo menos seguro. Modo Mixto: Permite a los usuarios conectarse con la autenticacin de Windows o la autenticacin de SQL Server. Los usuarios que se conectan mediante una cuenta de usuario de Windows pueden usar conexiones de confianza validadas por Windows. Si tiene que elegir el modo de autenticacin mixto y necesita utilizar inicios de sesin de SQL para incluir aplicaciones heredadas, debe establecer contraseas seguras para todas las cuentas de SQL Server.

Escribir contrasea Escriba y confirme el inicio de sesin del administrador del sistema (sa). Las contraseas son la primera lnea de defensa contra los intrusos, as que establecer contraseas seguras es esencial para la seguridad del sistema. No establezca nunca una contrasea en blanco o no segura.

Las contraseas de SQL Server pueden contener de 1 a 128 caracteres, incluida cualquier combinacin de letras, smbolos y nmeros. Si elige la autenticacin de modo mixto, debe escribir una contrasea de sa segura antes de continuar con la siguiente pgina del Asistente para la instalacin Directrices para contraseas seguras Las contraseas seguras no pueden ser adivinadas con facilidad y tampoco son fcilmente vulnerables en caso de utilizar un programa informtico. Las contraseas seguras no pueden utilizar los siguientes trminos o condiciones prohibidos:

Una condicin en blanco o NULL "Password" "Admin" "Administrator" "sa" "sysadmin"

Una contrasea segura no puede ser ninguno de los siguientes trminos asociados al equipo de instalacin:

El nombre del usuario que haya iniciado actualmente la sesin en el equipo. El nombre del equipo.

Una contrasea segura debe tener ms de 8 caracteres de longitud y satisfacer al menos tres de los siguientes criterios:

Debe contener letras maysculas. Debe contener letras minsculas. Debe contener nmeros. Debe contener caracteres no alfanumricos; por ejemplo, #, %, o ^.

Las contraseas que se escriben en esta pgina deben cumplir los requisitos de las directivas de contraseas seguras. Si tiene alguna automatizacin que use la autenticacin de SQL Server, asegrese de que la contrasea cumple los requisitos de las directivas de contraseas seguras.

Tipos de Inicios de sesin Windows Usuario Grupo de usuarios SQL Server Certificado Clave Asimtrica Asociados a Credenciales Para acceso a recursos externos Opciones de Administracin Podemos forzar el cambio de contrasea en el primer inicio de sesin: MUST_CHANGE Exigir directivas de contrasea Desbloquear Cuentas: UNLOCK Deshabilitar un inicio de sesin: DISABLE Establecer una BD de conexin predeterminada

Crear Inicios de sesin


Grficamente SSMS CREATE LOGIN
CREATE LOGIN Pepe WITH PASSWORD = Passwd MUST_CHANGE

CREATE LOGIN [UNICAN\pepe] FROM WINDOWS DROP LOGIN / ALTER LOGIN La informacin se almacena en sys.server_principals: Contiene una fila por cada entidad de seguridad del servidor sys.sql_logins: Devuelve una fila por cada inicio de sesin de SQL. Roles fijos de Servidor Cada rol agrupa un conjunto de permisos Facilitan la admn. de seguridad Se definen a nivel de servidor. Independiente, por tanto, de las bases de datos. Un inicio de sesin puede pertenecer a cero o ms roles de servidor Un inicio de sesin que pertenezca a un rol de servidor adquiere los permisos de ese rol Son fijos: o No se pueden modificar sus permisos o No pueden eliminarse o No pueden aadirse nuevos roles de servidor Para administrar con facilidad los permisos en el servidor, SQL Server proporciona varios roles, que son las entidades de seguridad que agrupan a otras entidades de

seguridad. Los roles son como los grupos del sistema operativo Microsoft Windows. Los roles fijos de servidor se proporcionan con fines de comodidad y de compatibilidad con versiones anteriores. Siempre que sea posible asigne permisos ms especficos. Los roles de nivel de servidor tambin se denominan roles fijos de servidor porque no se pueden crear nuevos roles de nivel de servidor. Los roles de nivel de servidor se aplican a todo el servidor en lo que respecta a su mbito de permisos. Puede agregar inicios de sesin de SQL Server, cuentas de Windows y grupos de Windows a los roles de nivel de servidor. Cada miembro de un rol fijo de servidor puede agregar otros inicios de sesin a ese mismo rol. En la tabla siguiente se muestran los roles de nivel de servidor y sus capacidades.
Nombre del rol de nivel de servidor

Descripcin Los miembros del rol fijo de servidor sysadmin pueden realizar cualquier actividad en el servidor. Los miembros del rol fijo de servidor serveradmin pueden cambiar las opciones de configuracin en el servidor y apagarlo. Los miembros del rol fijo de servidor securityadmin administran los inicios de sesin y sus propiedades. Pueden administrar los permisos de servidor GRANT, DENY y REVOKE. Tambin pueden administrar los permisos de nivel de base de datos GRANT, DENY y REVOKE si tienen acceso a una base de datos. Asimismo, pueden restablecer las contraseas para los inicios de sesin de SQL Server. Nota de seguridad La capacidad de conceder acceso a Motor de base de datos y configurar los permisos de usuario permite que el administrador de seguridad asigne la mayora de los permisos de servidor. El rol securityadmin se debe tratar como equivalente del rol sysadmin. Los miembros del rol fijo de servidor processadmin pueden finalizar los procesos que se ejecuten en una instancia de SQL Server. Los miembros del rol fijo de servidor setupadmin pueden agregar y quitar servidores vinculados. Los miembros del rol fijo de servidor bulkadmin pueden ejecutar la instruccin BULK INSERT. El rol fijo de servidor diskadmin se usa para administrar

sysadmin serveradmin

securityadmin

processadmin

setupadmin bulkadmin diskadmin

dbcreator public

archivos de disco. Los miembros del rol fijo de servidor dbcreator pueden crear, modificar, quitar y restaurar cualquier base de datos. Cada inicio de sesin de SQL Server pertenece al rol public de servidor. Cuando a una entidad de seguridad de servidor no se le han concedido ni denegado permisos especficos para un objeto protegible, el usuario hereda los permisos concedidos al rol public en ese objeto. Solo asigne los permisos pblicos en objetos cuando desee que estos estn disponibles para todos los usuarios.

SQL Server les asigna permisos especficos a los roles fijos de servidor. Los permisos de estos roles no se pueden cambiar. Los roles fijos de servidor se proporcionan con fines de comodidad y de compatibilidad con versiones anteriores. Siempre que sea posible asigne permisos ms especficos.

En la siguiente tabla se describen los permisos que se conceden a los roles fijos de servidor. Rol fijo de servidor bulkadmin dbcreator diskadmin processadmin securityadmin Permiso en el nivel de servidor Se le concede: ADMINISTER BULK OPERATIONS Se le concede: CREATE ANY DATABASE Se le concede: ALTER RESOURCES Se le conceden: ALTER ANY CONNECTION, ALTER SERVER STATE Se le concede: ALTER ANY LOGIN Nota de seguridad La capacidad de conceder acceso a Motor de base de datos y configurar los permisos de usuario permite que el administrador de seguridad asigne la mayora de los permisos de servidor. El rol securityadmin se debe tratar como equivalente del rol sysadmin. Se le conceden: ALTER ANY ENDPOINT, ALTER RESOURCES, ALTER SERVER STATE, ALTER SETTINGS, SHUTDOWN, VIEW SERVER STATE Se le concede: ALTER ANY LINKED SERVER Se le concede con la opcin GRANT: CONTROL SERVER

serveradmin

setupadmin sysadmin

El rol de servidor public no es un rol fijo de servidor, ya que los permisos se pueden cambiar. Al rol de servidor public se le concede el permiso VIEW ANY DATABASE y el permiso CONNECT en los extremos predeterminados (TSQL Local Machine, TSQL Named Pipes, TSQL Default TCP, TSQL Default VIA). Los miembros del rol fijo de servidor securityadmin pueden conceder permisos de nivel de servidor y de nivel de base de datos. Los roles fijos de servidor no son equivalentes a su permiso de nivel de servidor. Por ejemplo, el rol fijo de servidor sysadmin tiene el permiso CONTROL SERVER. Pero la concesin del permiso CONTROL SERVER no convierte ningn inicio de sesin en miembro del rol fijo de servidor sysadmin. La funcin IS_SRVROLEMEMBER (Transact-SQL) informar correctamente de que el inicio de sesin no es miembro del rol fijo de servidor sysadmin. Los miembros del rol fijo de servidor sysadmin se identifican como el usuario dbo en todas las bases de datos, pero los inicios de sesin con el permiso CONTROL SERVER, no.

Trabajar con roles de nivel de servidor


En la tabla siguiente se explican los comandos, las vistas y las funciones que se usan para trabajar con los roles de nivel de servidor. sp_helpsrvrole (Transact-SQL) Devuelve una lista de las funciones fijas de servidor de SQL Server. Sintaxis sp_helpsrvrole [ [ @srvrolename = ] 'role' ] Ejemplo En el siguiente ejemplo se devuelve la lista de las funciones fijas de servidor disponibles.
EXEC sp_helpsrvrole

Resultado
ServerRole ----------------------------------sysadmin securityadmin serveradmin setupadmin processadmin diskadmin dbcreator bulkadmin (8 filas afectadas) Description ----------------------------------System Administrators Security Administrators Server Administrators Setup Administrators Process Administrators Disk Administrators Database Creators Bulk Insert Administrators

sp_helpsrvrolemember (Transact-SQL)
Devuelve informacin acerca de los miembros de una funcin fija de servidor de SQL Server Sintaxis sp_helpsrvrolemember [ [ @srvrolename = ] 'role' ] Ejemplo En el ejemplo siguiente se enumeran los miembros de la funcin fija de servidor sysadmin.
EXEC sp_helpsrvrolemember 'sysadmin'

Resultado
ServerRole ---------------sysadmin sysadmin sysadmin MemberName MemberSID ----------------------------- ----------------------sa 0x01 NT AUTHORITY\SYSTEM 0x010100000000000512000000 NT SERVICE\MSSQL$SQLEXPRESS 0x010600000000000550000000 703344E71D40B7FFB8844562A9 E3C7D4FD9771D8 JoseManuel-HP\Jose Manuel 0x010500000000000515000000 28765248C5C69DBD5E9F7722E9 030000 (4 filas afectadas)

sysadmin

sp_srvrolepermission (Transact-SQL)
Muestra los permisos de una funcin fija del servidor. sp_srvrolepermission devuelve la informacin correcta SQL Server 2000. La salida no refleja cambios en la jerarqua de permisos implementada en SQL Server 2005. Sintaxis
sp_srvrolepermission [ [ @srvrolename = ] 'role']

Ejemplo En la siguiente consulta se devuelven los permisos asociados a la funcin fija de servidor sysadmin.
EXEC sp_srvrolepermission 'sysadmin'; GO

Resultado ServerRole Permission


sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin Add extended procedures Add member to bulkadmin Add member to dbcreator Add member to diskadmin Add member to processadmin Add member to securityadmin Add member to serveradmin Add member to setupadmin Add member to sysadmin Add/drop to/from db_accessadmin Add/drop to/from db_backupoperator Add/drop to/from db_datareader Add/drop to/from db_datawriter Add/drop to/from db_ddladmin Add/drop to/from db_denydatareader Add/drop to/from db_denydatawriter Add/drop to/from db_owner Add/drop to/from db_securityadmin Add/drop/configure linked servers All DDL but GRANT, REVOKE, DENY ALTER DATABASE BACKUP DATABASE BACKUP LOG BULK INSERT CHECKPOINT Complete SETUSER SQL user Constraints on System tables CREATE DATABASE Create indices on system tables Create/delete/modify system tables dbcc change 'on' rules dbcc checkalloc dbcc checkdb dbcc checkfilegroup dbcc checkident dbcc checktable dbcc cleantable dbcc dbreindex dbcc dropcleanbuffers dbcc freeproccache dbcc inputbuffer dbcc outputbuffer

sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin

dbcc pintable dbcc proccache dbcc setcpuweight dbcc setioweight dbcc show_statistics dbcc showcontig dbcc showoptweights DBCC ShrinkDatabase dbcc shrinkfile dbcc traceon/off dbcc updateusage DELETE permission on any object DENY DISK INIT DROP DATABASE EXECUTE any procedure Extend database GRANT Grant/deny/revoke CREATE DATABASE INSERT permission on any object KILL Mark a stored procedure as startup Raiserror With Log Read the error log RECONFIGURE REFERENCES permission on any table RESTORE DATABASE RESTORE LOG REVOKE SELECT permission on any object SHUTDOWN sp_addapprole sp_addlinkedsrvlogin sp_addlogin sp_addrole sp_addrolemember sp_addumpdevice sp_adduser sp_altermessage sp_approlepassword sp_change_users_login sp_changedbowner sp_changeobjectowner sp_configure sp_dbcmptlevel sp_dboption (update) sp_dboption update part sp_defaultdb sp_defaultlanguage sp_denylogin sp_diskdefault sp_dropalias sp_dropapprole sp_dropdevice

sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin sysadmin

sp_droplinkedsrvlogin sp_droplogin sp_dropremotelogin sp_droprole sp_droprolemember sp_dropuser sp_fulltext_catalog sp_fulltext_column sp_fulltext_database sp_fulltext_service sp_fulltext_table sp_grantdbaccess sp_grantlogin sp_helplogins sp_password sp_recompile sp_refreshview sp_remoteoption sp_remoteoption (update) sp_rename sp_renamedb sp_revokedbaccess sp_revokelogin sp_tableoption sp_updatestats TRUNCATE TABLE UPDATE permission on any object USE to a suspect database

IS_SRVROLEMEMBER (Transact-SQL)
Indica si en el inicio de sesin de SQL Server el usuario es miembro de la funcin fija de servidor especificada. Sintaxis IS_SRVROLEMEMBER ( 'role' [ , 'login' ] ) Ejemplo En el siguiente ejemplo se indica si el inicio de sesin de SQL Server para el usuario actual es miembro de la funcin fija de servidor sysadmin.
IF IS_SRVROLEMEMBER ('sysadmin') = 1 print 'Current user''s login is a member of the sysadmin role' ELSE IF IS_SRVROLEMEMBER ('sysadmin') = 0 print 'Current user''s login is NOT a member of the sysadmin role' ELSE IF IS_SRVROLEMEMBER ('sysadmin') IS NULL print 'ERROR: The server role specified is not valid.'

Resultado
Current user's login is a member of the sysadmin role

sp_dropsrvrolemember (Transact-SQL)

Quita un inicio de sesin de SQL Server o un usuario o grupo de Windows de una funcin fija de servidor.

Sintaxis
sp_dropsrvrolemember [ @loginame = ] 'login' , [ @rolename = ] 'role'

Ejemplo
En el siguiente ejemplo se quita el inicio de sesin JackO de la funcin fija de servidor sysadmin.
EXEC sp_dropsrvrolemember 'JackO', 'sysadmin'

Seguridad de base de datos Los siguientes inicios de sesin pueden conectarse a una BD: sysadmin Propietario de la BD Usuarios de la BD Cualquier inicio de sesin si existe el usuario guest y tiene permiso

Usuario de BD Definido a nivel de BD Corresponde con un inicio de sesin

Conceder acceso a una BD Pueden conceder permisos: Sysadmin Propietario de la BD Usuario con rol db_owner Usuario con rol db_accessadmin

Al conceder acceso a un inicio de sesin a una base de datos: Se crea el usuario correspondiente en esa BD Pertenece al rol public

Para conceder permisos sp_grantdbaccess y sp_adduser Para quitar el acceso sp_revokedbaccess Para reasignar inicios de sesin con usuarios sp_change_users_login Ver info de usuarios sp_helpuser

Para configurar el acceso a la base de datos


1. En el equipo en el que se ejecuta SQL Server, inicie SQL Server Management Studio. En el panel Servidores registrados, haga doble clic en SQL Server. 2. En el panel del explorador de objetos, expanda SQL Server, expanda la carpeta Seguridad, haga clic con el botn secundario en Inicios de sesin y despus haga clic en Nuevo inicio de sesin. 3. En el cuadro de dilogo Inicio de sesin - Nuevo, especifique el modo de autenticacin de Windows o autenticacin de SQL Server. a. Si utiliza la autenticacin de Windows, escriba un nombre de inicio de sesin y seleccione la opcin Conceder acceso o la opcin Denegar acceso. b. Si utiliza la autenticacin de SQL Server, escriba un nombre de inicio de sesin y una contrasea y, a continuacin, confirme esta ltima. 4. En el panel izquierdo, haga clic en Acceso a base de datos. 5. En el panel derecho, seleccione la casilla de verificacin Permitir para las bases de datos a las que est concediendo acceso y, a continuacin, haga clic en Aceptar.

Usuarios por defecto en una BD


dbo: Propietario. No puede ser borrado de la BD Guest: Permite a usuarios que no tienen cuenta en la BD, que accedan a ella, pero hay que darle permiso explcitamente Information_schema Permite ver los metadatos de SQL Server sys Permite consultar las tablas y vistas del sistema, procedimientos extendidos y otros objetos del catlogo del sistema Mostrar usuarios de una base de datos Select * from sys.database_principals

Creacin de un inicio de sesin

Asignacin de un rol de servidor

Asignacin de usuarios

Elementos que pueden proteger

Estado del inicio de sesin

Para crear un usuario de base de datos 1. En el Explorador de objetos, expanda la carpeta Bases de datos. 2. Expanda la base de datos en la que se va a crear el usuario de la misma. 3. Haga clic con el botn secundario en la carpeta Seguridad, seleccione Nuevo y seleccione Usuario. 4. En el cuadro de dilogo Usuario de la base de datos - Nuevo, en la pgina General, seleccione uno de los tipos de usuario siguientes de la lista Tipo de usuario: Usuario SQL con inicio de sesin, Usuario SQL sin inicio de sesin, Usuario asignado a un certificado, Usuario asignado a una clave asimtrica o Usuario de Windows. 5. En el cuadro Nombre de usuario, escriba un nombre para el nuevo usuario. Si ha elegido Usuario de Windows en la lista Tipo de usuario, tambin puede hacer clic en los puntos suspensivos () para abrir el cuadro de dilogo Seleccionar usuarios o grupos. 6. En el cuadro Nombre de inicio de sesin, escriba el inicio de sesin para el usuario. Como alternativa, haga clic en los puntos suspensivos () para abrir el cuadro de dilogo Seleccionar inicio de sesin. Si selecciona Usuario SQL con inicio de sesin o Usuario de Windows en la lista Tipo de usuario, estar disponible Nombre de inicio de sesin. 7. En el cuadro Esquema predeterminado, especifique el esquema al que pertenecern los objetos creados por este usuario. Como alternativa, haga clic en los puntos suspensivos () para abrir el cuadro de dilogo Seleccionar esquema. Si selecciona Usuario SQL con inicio de sesin, Usuario SQL sin inicio de sesin, o Usuario de Windows en la lista Tipo de usuario, estar disponible Esquema predeterminado. 8. En el cuadro de Nombre de certificado, escriba el certificado que se utilizar para el usuario de base de datos. Como alternativa, haga clic en los puntos suspensivos () para abrir el cuadro de dilogo Seleccionar certificado. Si selecciona Usuario asignado a un certificado en la lista Tipo de usuario, estar disponible Nombre de certificado. 9. En el cuadro Nombre de clave asimtrica , escriba la clave que se va a utilizar para el usuario de base de datos. Como alternativa, haga clic en los puntos suspensivos () para abrir el cuadro de dilogo Seleccionar clave asimtrica. Si selecciona Usuario asignado a una clave asimtrica en la lista Tipo de usuario, estar disponible Nombre de clave asimtrica. 10. Haga clic en Aceptar. Para crear un usuario de base de datos 1. En el Explorador de objetos, conctese a una instancia del Motor de base de datos. 2. En la barra Estndar, haga clic en Nueva consulta. 3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar.

4. -Creates the login AbolrousHazem with '340$Uuxwp7Mcxo7Khy'. 5. CREATE LOGIN AbolrousHazem 6. WITH PASSWORD = '340$Uuxwp7Mcxo7Khy'; 7. GO 8. 9. -- Creates a database user for the login created above. 10. CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem; 11. GO

password

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

Invitado GRANT CONNECT TO GUEST

Informacin sobre usuarios en: sys.database_principals

Roles o funciones de Base de Datos


CREATE ROLE <nombre> Asignar a un usuario sp_addrolemember <role>,<usuario> Ver informacin en: sys.database_role_members Rol Public

Crear un rol de BD

Establecer proteccin a asegurables

Conceder permisos
Concede permisos en un asegurable a una entidad de seguridad. GRANT { ALL [ PRIVILEGES ] } | permission [ ( column [ ,...n ] ) ] [ ,...n ] [ ON [ class :: ] securable ] TO principal [ ,...n ] [ WITH GRANT OPTION ] [ AS principal ] ALL: Esta opcin no concede todos los permisos posibles. Si el asegurable es una base de datos, "ALL" significa BACKUP DATABASE, BACKUP LOG, CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE y CREATE VIEW. Si es una funcin escalar, "ALL" significa EXECUTE y REFERENCES. Si es una funcin con valores de tabla, "ALL" se refiere a DELETE, INSERT, REFERENCES, SELECT y UPDATE. Si es un proc. almacenado, "ALL" significa DELETE, EXECUTE, INSERT, SELECT y UPDATE. Si es una tabla o vista, "ALL" significa DELETE, INSERT, REFERENCES, SELECT y UPDATE.

WITH GRANT OPTION: el usuario al que se le otorga permiso, puede a su vez, otorgrselo a otro. Establecer permisos: ejemplos Permitir a los usuarios Maria, Juan y Marta crear bases de datos y tablas GRANT CREATE DATABASE, CREATE TABLE TO Maria, Juan, [Servidor\Marta] Permitir a Mara y a Juan, insertar, modificar y borrar en la tabla autores. GRANT INSERT, UPDATE, DELETE ON autores TO Maria, Juan Permitir a Mara actualizar el importe del prstamo. GRANT UPDATE( importe ) ON prestamo TO Maria

Revocar permisos Quita un permiso concedido o denegado previamente. Su sintaxis es: REVOKE [ GRANT OPTION FOR ] { [ ALL [ PRIVILEGES ] ] | permission [ ( column [ ,...n ] ) ] [ ,...n ] } [ ON [ class :: ] securable ] [TO | FROM } principal [ ,...n ] [ CASCADE] [ AS principal ] Revocar permisos _ GRANT OPTION FOR : se quita al usuario la capacidad de dar o quitar permisos que le fueron concedidos por la clusula WITH GRANT OPTION _ permiso: SELECT, INSERT, DELETE, UPDATE, REFERENCES, EXECUTE, CREATE, etc. _ CASCADE : se quita el permiso al usuario/role y a los usuarios/roles a los que dio permiso, si se le concedi GRANT OPTION. _ AS : usuario o role que quita el permiso Revocar permisos: ejemplos Impedir a los usuarios Maria y Marta crear vistas en la BD activa. REVOKE CREATE VIEW TO Maria, [Servidor\Marta] REVOKE CREATE VIEW TO Maria, [Servidor\Marta] Denegar permisos _ Deniega un permiso a una entidad de seguridad. Evita que la entidad de seguridad herede permisos por su pertenencia a grupos o funciones. Su sintaxis es: DENY { [ ALL [ PRIVILEGES ] ] | permission [ ( column [ ,...n ] ) ] [ ,...n ] }

[ ON [ class :: ] securable ] TO principal [ ,...n ] [ CASCADE] [ AS principal ] _ permiso: SELECT, INSERT, DELETE, UPDATE, REFERENCES, EXECUTE, CREATE, etc. _ CASCADE : Indica que el permiso se deniega para la entidad de seguridad especificada y para el resto de entidades de seguridad a las que sta concedi el permiso. Es obligatorio cuando la entidad de seguridad tiene el permiso con GRANT OPTION. _ AS : usuario o role que quita el permiso

Limitaciones de la seguridad
_ No se puede establecer privilegios a nivel de fila (p. ej. cada alumno slo vea sus notas) _ Hay extensiones para proporcionar control de acceso en el nivel de las filas y para trabajar con gran nmero de usuarios pero an no estn normalizadas. _ Utilizar vistas para restringir la informacin. _ Establecer la seguridad en aplicaciones de BD: - Usuarios _ Usuarios de domino / de gestor con sus privilegios _ Usuarios de dominio / de gestor con rol de aplicacin _ Usuario nico con privilegios - Crear BD de seguridad donde se establece con detalle las acciones que cada usuario de aplicacin puede hacer _ Cdigo de aplicacin se entremezcla con el de autorizacin _ Ms difcil de garantizar la existencia de agujeros de seguridad Estrategias de seguridad _ Uso de vistas y funciones _ Dar permisos a vistas y funciones en lugar de a las propias tablas _ Ocultan la complejidad de la BD _ Permiten gestionar el acceso a nivel de columna _ Uso de procedimientos almacenados _ Impiden operaciones incorrectas asegurando las reglas de negocio _ Los usuarios no necesitan tener permiso para acceder a las tablas, solo permiso de ejecucin de los procedimientos _ Permiten establecer el nivel de seguridad ms fino (contexto)

Encriptacin de datos

El cifrado es el proceso consistente en ofuscar los datos mediante el uso de una clave o contrasea. Esto puede hacer que los datos sean intiles sin la clave o contrasea de descifrado correspondiente. El cifrado no resuelve los problemas de control de acceso. Sin embargo, mejora la seguridad debido a que limita la prdida de datos, incluso si se superan los controles de acceso. Por ejemplo, si el equipo host de base de datos no est configurado correctamente y un usuario malintencionado obtiene datos confidenciales, esa informacin robada podra resultar inservible si est cifrada. Puede utilizar el cifrado en SQL Server para las conexiones, los datos y los procedimientos almacenados. La tabla siguiente contiene ms informacin acerca del cifrado en SQL Server. _ para qu? _ Evitar acceso a datos sensibles _ Evitar robo de copias de seguridad con datos sensibles _ qu tcnicas? _ Encriptacin a nivel de columna _ Encriptacin transparente (TDE), afecta a toda la BD _ coste? _ Mayor sobrecarga y puede afectar al rendimiento _ Requiere una estrategia para la definicin y mantenimiento de claves, passwords y certificados _ Por ello no debe considerarse para todos los datos y conexiones Encriptacin a nivel de columna _ Mediante certificados, keys o frases _ Requiere el uso de funciones especficas _ EncrypByCert() DecryptByCert() _ EncrypyAsymkey() DecryptByAsymKey() _ Encrypykey() DecryptBKey() _ EncrypyPassphrase() DecryptByPassphrase() _ Encriptacin transparente (TDE), afecta a toda la BD _ No protege las comunicaciones entre aplicacin cliente y servidor _ No encripta FILESCREAM _ No impide al DBA ver los datos _ Puede caer el rendimiento si conviven BD TDE y sin encriptar USE AdventureWorks2008R2; --If there is no master key, create one now. IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101) CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Th15i$aS7riN&ofR@nD0m!T3%t' select top 5 * from Sales.CreditCard /* CreditCardID CardType CardNumber ExpMonth ExpYear ModifiedDate ------------ -------------- -------------- -------- ------- -----------

1 SuperiorCard 33332664695310 11 2006 2007-08-30 2 Distinguish 55552127249722 8 2005 2008-01-06 3 ColonialVoice 77778344838353 7 2005 2008-02-15 4 ColonialVoice 77774915718248 7 2006 2007-06-21 5 Vista 11114404600042 4 2005 2007-03-05 */

/*create creditCard_encrypt table changing CardNumber by CardNumber_encrypt*/ select CreditCardID, CardType, CardNumber_encrypt = CONVERT(varbinary(256), CardNumber), ExpMonth, ExpYear, ModifiedDate into Sales.CreditCard_encrypt from Sales.CreditCard where 1=2 declare @passphrase varchar(128) set @passphrase = 'unencrypted credit card numbers are bad, um-kay' insert Sales.CreditCard_encrypt ( CardType, CardNumber_encrypt, ExpMonth, ExpYear, ModifiedDate ) select top 5 CardType, CardNumber_encrypt = EncryptByPassPhrase(@passphrase, CardNumber), ExpMonth, ExpYear, ModifiedDate from Sales.CreditCard select * from Sales.CreditCard_encrypt /* CreditCardID CardType CardNumber_encrypt ExpMonth ExpYear ModifiedDate ------------ ------------- --------------------- -------- ------- ----------1 SuperiorCard 0x010000007C65089E... 11 2006 2007-08-30 2 Distinguish 0x010000000C624987... 8 2005 2008-01-06 3 ColonialVoice 0x01000000AA8761A0... 7 2005 2008-02-15 4 ColonialVoice 0x010000002C2857CC... 7 2006 2007-06-21

declare @passphrase varchar(128) set @passphrase = 'unencrypted credit card numbers are bad, um-kay' select CreditCardID, CardType,

CardNumber = convert(nvarchar(25), DecryptByPassPhrase(@passphrase, CardNumber_encrypt)), ExpMonth, ExpYear, ModifiedDate from Sales.CreditCard_encrypt /* CreditCardID CardType CardNumber ExpMonth ExpYear ModifiedDate ------------ -------------- -------------- -------- ------- ----------1 SuperiorCard 33332664695310 11 2006 2007-08-30 2 Distinguish 55552127249722 8 2005 2008-01-06 3 ColonialVoice 77778344838353 7 2005 2008-02-15 4 ColonialVoice 77774915718248 7 2006 2007-06-21 5 Vista 11114404600042 4 2005 2007-03-05 */

Credenciales (motor de base de datos)


Una credencial es un registro que contiene la informacin de autenticacin (credenciales) necesaria para conectarse a un recurso situado fuera de SQL Server. Esta informacin la utiliza SQL Server internamente. La mayora de las credenciales incluyen un nombre de usuario y una contrasea de Windows. La informacin almacenada en una credencial permite al usuario que se ha conectado a SQL Server mediante la autenticacin de SQL Server obtener acceso a recursos situados fuera de la instancia del servidor. Cuando el recurso externo es Windows, el usuario se autentica como el usuario de Windows especificado en la credencial. Se puede asignar una nica credencial a varios inicios de sesin de SQL Server. Sin embargo, un inicio de sesin de SQL Server solo se puede asignar a una credencial. Las credenciales del sistema se crean de forma automtica y se asocian a extremos especficos. Los nombres de las credenciales del sistema comienzan por dos signos de nmero (##). CREAR CREDENCIAL (Transact-SQL) Sintaxis CREATE CREDENTIAL credential_name WITH IDENTITY = 'identity_name' [ , SECRET = 'secret' ] [ FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name ]

Argumentos Credential_name: Especifica el nombre de la credencial que se va a crear. credential_name no puede comenzar por el signo de nmero (#). Las credenciales del sistema comienzan por ##. IDENTITY ='identity_name': Especifica el nombre de la cuenta que se utilizar para conectarse fuera del servidor. SECRET ='secret': Especifica el secreto necesario para la autenticacin de salida. Esta clusula es opcional. FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name: Especifica el nombre de un Proveedor de administracin de claves de la empresa (EKM). Para obtener ms informacin sobre la administracin de claves.

Ejemplo. En el ejemplo siguiente se utiliza una cuenta creada previamente denominada User1OnEKM en un mdulo EKM a travs de las herramientas de administracin de EKM, con un tipo de cuenta y una contrasea bsicos. La cuenta sysadmin del servidor crea una credencial que se utiliza para conectar a la cuenta de EKM y la asigna a la cuenta User1 de SQL Server:

CREATE CREDENTIAL CredentialForEKM WITH IDENTITY='User1OnEKM' , SECRET='<EnterStrongPasswordHere>' FOR CRYPTOGRAPHIC PROVIDER MyEKMProvider; GO /* Modify the login to assign the cryptographic provider credential */ ALTER LOGIN User1 ADD CREDENTIAL CredentialForEKM; /* Modify the login to assign a non cryptographic provider credential */ ALTER LOGIN User1 WITH CREDENTIAL = AlterEgo; GO

Fuentes

http://www.informatizate.net/articulos/modelo_de_seguridad_de_sql_server_ 7_0_2000_13072004.html http://msdn.microsoft.com/es-es/library/ee677331%28v=azure.10%29.aspx http://msdn.microsoft.com/es-es/library/cc281849%28v=sql.105%29.aspx http://personales.unican.es/zorrillm/Dise%C3%B1oAdmonBD/temas/segurida d%20TSQL%20SQL%20server%202008.pdf http://msdn.microsoft.com/es-es/library/ms175892%28v=sql.105%29.aspx http://msdn.microsoft.com/es-es/library/ms188659%28v=sql.105%29.aspx

http://msdn.microsoft.com/es-es/library/aa337545.aspx#SSMSProcedure http://msdn.microsoft.com/es-es/library/bb934049%28v=sql.105%29.aspx