3.4 Definición del esquema de seguridad.docx

40
3.4 DEFINICIÓN DEL ESQUEMA DE SEGURIDAD Jerarquía de Seguridad Entidades de seguridad: Usuarios windows, usuarios sql server, Usuarios de BD. Asegurables: recursos que pueden ser protegidos.

Transcript of 3.4 Definición del esquema de seguridad.docx

Page 1: 3.4 Definición del esquema de seguridad.docx

3.4 DEFINICIÓN DEL ESQUEMA DE SEGURIDAD

Jerarquía de Seguridad

Entidades de seguridad: Usuarios windows, usuarios sql server, Usuarios de BD.

Asegurables: recursos que pueden ser protegidos.

Page 2: 3.4 Definición del esquema de seguridad.docx

Modos de autenticación de SQL Server 2008

Para poder acceder a los datos de una base de datos, un usuario tiene que pasar a través de 2 niveles de autenticación: 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.

Page 3: 3.4 Definición del esquema de seguridad.docx

Login: Un nombre de login válido 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 válida dentro de una base de datos es requerida para acceder a esta base de datos. Las cuentas de usuario son específicas 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.

Autenticación de Windows. Cuando un usuario se conecta a través de una cuenta de usuario de Microsoft Windows, SQL Server valida el nombre de cuenta y la contraseña con el token de la entidad de seguridad de Windows del sistema operativo. Éste es el modo de autenticación predeterminado, y es mucho más seguro que el modo mixto. La autenticación de Windows utiliza el protocolo de seguridad Kerberos, cumple la directiva de contraseñas en lo que respecta a la validación de la complejidad de las contraseñas seguras y permite el bloqueo de las cuentas y la expiración de las contraseñas.

Autenticación de SQL Server. Modo de autenticación 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 contraseña específica. Es el modo menos seguro.

Modo Mixto: Permite a los usuarios conectarse con la autenticación de Windows o la autenticación 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 autenticación mixto y necesita utilizar inicios de sesión de SQL para incluir aplicaciones heredadas, debe establecer contraseñas seguras para todas las cuentas de SQL Server.

Escribir contraseña

Escriba y confirme el inicio de sesión del administrador del sistema (sa). Las contraseñas son la primera línea de defensa contra los intrusos, así que establecer contraseñas seguras es esencial para la seguridad del sistema. No establezca nunca una contraseña en blanco o no segura.

Page 4: 3.4 Definición del esquema de seguridad.docx

Las contraseñas de SQL Server pueden contener de 1 a 128 caracteres, incluida cualquier combinación de letras, símbolos y números. Si elige la autenticación de modo mixto, debe escribir una contraseña de sa segura antes de continuar con la siguiente página del Asistente para la instalación

Directrices para contraseñas seguras

Las contraseñas seguras no pueden ser adivinadas con facilidad y tampoco son fácilmente vulnerables en caso de utilizar un programa informático. Las contraseñas seguras no pueden utilizar los siguientes términos o condiciones prohibidos:

Una condición en blanco o NULL "Password" "Admin" "Administrator" "sa" "sysadmin"

Una contraseña segura no puede ser ninguno de los siguientes términos asociados al equipo de instalación:

El nombre del usuario que haya iniciado actualmente la sesión en el equipo. El nombre del equipo.

Una contraseña segura debe tener más de 8 caracteres de longitud y satisfacer al menos tres de los siguientes criterios:

Debe contener letras mayúsculas. Debe contener letras minúsculas. Debe contener números. Debe contener caracteres no alfanuméricos; por ejemplo, #, %, o ^.

Las contraseñas que se escriben en esta página deben cumplir los requisitos de las directivas de contraseñas seguras. Si tiene alguna automatización que use la autenticación de SQL Server, asegúrese de que la contraseña cumple los requisitos de las directivas de contraseñas seguras.

Page 5: 3.4 Definición del esquema de seguridad.docx

Tipos de Inicios de sesión

Windows Usuario Grupo de usuarios

SQL Server Certificado Clave Asimétrica Asociados a Credenciales

Para acceso a recursos externos 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 Establecer una BD de conexión predeterminada

Crear Inicios de sesión Gráficamente SSMS CREATE LOGIN

CREATE LOGIN Pepe WITH PASSWORD = ‘Passwd MUST_CHANGE

CREATE LOGIN [UNICAN\pepe] FROM WINDOWSDROP LOGIN / ALTER LOGIN

La información 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 sesión de SQL.

Roles fijos de Servidor Cada rol agrupa un conjunto de permisos Facilitan la admón. de seguridad Se definen a nivel de servidor. Independiente, por tanto, de las bases de

datos. Un inicio de sesión puede pertenecer a cero o más roles de servidor Un inicio de sesión que pertenezca a un rol de servidor adquiere los

permisos de ese rol Son fijos:

o No se pueden modificar sus permisoso No pueden eliminarseo No pueden añadirse 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

Page 6: 3.4 Definición del esquema de seguridad.docx

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 más específicos.

Los roles de nivel de servidor también 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 sesión 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 sesión 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

Descripción

sysadmin Los miembros del rol fijo de servidor sysadmin pueden realizar cualquier actividad en el servidor.

serveradmin Los miembros del rol fijo de servidor serveradmin pueden cambiar las opciones de configuración en el servidor y apagarlo.

securityadmin Los miembros del rol fijo de servidor securityadmin administran los inicios de sesión y sus propiedades. Pueden administrar los permisos de servidor GRANT, DENY y REVOKE. También 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 contraseñas para los inicios de sesión de SQL Server.

Nota de seguridadLa capacidad de conceder acceso a Motor de base de datos y configurar los permisos de usuario permite que el administrador de seguridad asigne la mayoría de los permisos de servidor. El rol securityadmin se debe tratar como equivalente del rol sysadmin.

processadmin Los miembros del rol fijo de servidor processadmin pueden finalizar los procesos que se ejecuten en una instancia de SQL Server.

setupadmin Los miembros del rol fijo de servidor setupadmin pueden agregar y quitar servidores vinculados.

bulkadmin Los miembros del rol fijo de servidor bulkadmin pueden ejecutar la instrucción BULK INSERT.

diskadmin El rol fijo de servidor diskadmin se usa para administrar archivos de disco.

Page 7: 3.4 Definición del esquema de seguridad.docx

dbcreator Los miembros del rol fijo de servidor dbcreator pueden crear, modificar, quitar y restaurar cualquier base de datos.

public Cada inicio de sesión 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 específicos para un objeto protegible, el usuario hereda los permisos concedidos al rol public en ese objeto. Solo asigne los permisos públicos en objetos cuando desee que estos estén disponibles para todos los usuarios.

SQL Server les asigna permisos específicos 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 más específicos.

En la siguiente tabla se describen los permisos que se conceden a los roles fijos de servidor.

Rol fijo de servidor

Permiso en el nivel de servidor

bulkadmin Se le concede: ADMINISTER BULK OPERATIONSdbcreator Se le concede: CREATE ANY DATABASEdiskadmin Se le concede: ALTER RESOURCESprocessadmin Se le conceden: ALTER ANY CONNECTION, ALTER SERVER

STATEsecurityadmin Se le concede: ALTER ANY LOGIN

Nota de seguridadLa capacidad de conceder acceso a Motor de base de datos y configurar los permisos de usuario permite que el administrador de seguridad asigne la mayoría de los permisos de servidor. El rol securityadmin se debe tratar como equivalente del rol sysadmin.

serveradmin Se le conceden: ALTER ANY ENDPOINT, ALTER RESOURCES, ALTER SERVER STATE, ALTER SETTINGS, SHUTDOWN, VIEW SERVER STATE

setupadmin Se le concede: ALTER ANY LINKED SERVERsysadmin Se le concede con la opción GRANT: CONTROL SERVER

Page 8: 3.4 Definición del esquema de seguridad.docx

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 concesión del permiso CONTROL SERVER no convierte ningún inicio de sesión en miembro del rol fijo de servidor sysadmin. La función IS_SRVROLEMEMBER (Transact-SQL) informará correctamente de que el inicio de sesión 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 sesión 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 Description----------------------------------- -----------------------------------sysadmin System Administratorssecurityadmin Security Administratorsserveradmin Server Administratorssetupadmin Setup Administratorsprocessadmin Process Administratorsdiskadmin Disk Administratorsdbcreator Database Creatorsbulkadmin Bulk Insert Administrators(8 filas afectadas)

Page 9: 3.4 Definición del esquema de seguridad.docx

sp_helpsrvrolemember (Transact-SQL)

Devuelve información acerca de los miembros de una función fija de servidor de SQL Server

Sintaxis

sp_helpsrvrolemember [ [ @srvrolename = ] 'role' ]

Ejemplo

En el ejemplo siguiente se enumeran los miembros de la función fija de servidor sysadmin.

EXEC sp_helpsrvrolemember 'sysadmin'

Resultado

ServerRole MemberName MemberSID---------------- ----------------------------- -----------------------sysadmin sa 0x01 sysadmin NT AUTHORITY\SYSTEM 0x010100000000000512000000sysadmin NT SERVICE\MSSQL$SQLEXPRESS

0x010600000000000550000000703344E71D40B7FFB8844562A9E3C7D4FD9771D8

sysadmin JoseManuel-HP\Jose Manuel 0x01050000000000051500000028765248C5C69DBD5E9F7722E9030000

(4 filas afectadas)

sp_srvrolepermission (Transact-SQL)

Muestra los permisos de una función fija del servidor. sp_srvrolepermission devuelve la información correcta SQL Server 2000. La salida no refleja cambios en la jerarquía de permisos implementada en SQL Server 2005.

Sintaxis

sp_srvrolepermission [ [ @srvrolename = ] 'role']

Page 10: 3.4 Definición del esquema de seguridad.docx

Ejemplo

En la siguiente consulta se devuelven los permisos asociados a la función fija de servidor sysadmin.

EXEC sp_srvrolepermission 'sysadmin';

GO

ResultadoServerRole Permissionsysadmin Add extended proceduressysadmin Add member to bulkadminsysadmin Add member to dbcreatorsysadmin Add member to diskadminsysadmin Add member to processadminsysadmin Add member to securityadminsysadmin Add member to serveradminsysadmin Add member to setupadminsysadmin Add member to sysadminsysadmin Add/drop to/from db_accessadminsysadmin Add/drop to/from db_backupoperatorsysadmin Add/drop to/from db_datareadersysadmin Add/drop to/from db_datawritersysadmin Add/drop to/from db_ddladminsysadmin Add/drop to/from db_denydatareadersysadmin Add/drop to/from db_denydatawritersysadmin Add/drop to/from db_ownersysadmin Add/drop to/from db_securityadminsysadmin Add/drop/configure linked serverssysadmin All DDL but GRANT, REVOKE, DENYsysadmin ALTER DATABASEsysadmin BACKUP DATABASEsysadmin BACKUP LOGsysadmin BULK INSERTsysadmin CHECKPOINTsysadmin Complete SETUSER SQL usersysadmin Constraints on System tablessysadmin CREATE DATABASEsysadmin Create indices on system tablessysadmin Create/delete/modify system tablessysadmin dbcc change 'on' rulessysadmin dbcc checkallocsysadmin dbcc checkdbsysadmin dbcc checkfilegroupsysadmin dbcc checkidentsysadmin dbcc checktablesysadmin dbcc cleantablesysadmin dbcc dbreindexsysadmin dbcc dropcleanbufferssysadmin dbcc freeproccachesysadmin dbcc inputbuffer

Page 11: 3.4 Definición del esquema de seguridad.docx

sysadmin dbcc outputbuffersysadmin dbcc pintablesysadmin dbcc proccachesysadmin dbcc setcpuweightsysadmin dbcc setioweightsysadmin dbcc show_statisticssysadmin dbcc showcontigsysadmin dbcc showoptweightssysadmin DBCC ShrinkDatabasesysadmin dbcc shrinkfilesysadmin dbcc traceon/offsysadmin dbcc updateusagesysadmin DELETE permission on any objectsysadmin DENYsysadmin DISK INITsysadmin DROP DATABASEsysadmin EXECUTE any proceduresysadmin Extend databasesysadmin GRANTsysadmin Grant/deny/revoke CREATE DATABASEsysadmin INSERT permission on any objectsysadmin KILLsysadmin Mark a stored procedure as startupsysadmin Raiserror With Logsysadmin Read the error logsysadmin RECONFIGUREsysadmin REFERENCES permission on any tablesysadmin RESTORE DATABASEsysadmin RESTORE LOGsysadmin REVOKEsysadmin SELECT permission on any objectsysadmin SHUTDOWNsysadmin sp_addapprolesysadmin sp_addlinkedsrvloginsysadmin sp_addloginsysadmin sp_addrolesysadmin sp_addrolemembersysadmin sp_addumpdevicesysadmin sp_addusersysadmin sp_altermessagesysadmin sp_approlepasswordsysadmin sp_change_users_loginsysadmin sp_changedbownersysadmin sp_changeobjectownersysadmin sp_configuresysadmin sp_dbcmptlevelsysadmin sp_dboption (update)sysadmin sp_dboption update partsysadmin sp_defaultdbsysadmin sp_defaultlanguagesysadmin sp_denyloginsysadmin sp_diskdefaultsysadmin sp_dropaliassysadmin sp_dropapprole

Page 12: 3.4 Definición del esquema de seguridad.docx

sysadmin sp_dropdevicesysadmin sp_droplinkedsrvloginsysadmin sp_droploginsysadmin sp_dropremoteloginsysadmin sp_droprolesysadmin sp_droprolemembersysadmin sp_dropusersysadmin sp_fulltext_catalogsysadmin sp_fulltext_columnsysadmin sp_fulltext_databasesysadmin sp_fulltext_servicesysadmin sp_fulltext_tablesysadmin sp_grantdbaccesssysadmin sp_grantloginsysadmin sp_helploginssysadmin sp_passwordsysadmin sp_recompilesysadmin sp_refreshviewsysadmin sp_remoteoptionsysadmin sp_remoteoption (update)sysadmin sp_renamesysadmin sp_renamedbsysadmin sp_revokedbaccesssysadmin sp_revokeloginsysadmin sp_tableoptionsysadmin sp_updatestatssysadmin TRUNCATE TABLEsysadmin UPDATE permission on any objectsysadmin USE to a suspect database

IS_SRVROLEMEMBER (Transact-SQL)

Indica si en el inicio de sesión de SQL Server el usuario es miembro de la función fija de servidor especificada.

Sintaxis

IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )

Ejemplo

En el siguiente ejemplo se indica si el inicio de sesión de SQL Server para el usuario actual es miembro de la función 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.'

Page 13: 3.4 Definición del esquema de seguridad.docx

Resultado

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

sp_dropsrvrolemember (Transact-SQL)

Quita un inicio de sesión de SQL Server o un usuario o grupo de Windows de una función fija de servidor.

Sintaxis

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

Ejemplo

En el siguiente ejemplo se quita el inicio de sesión JackO de la función fija de servidor sysadmin.

EXEC sp_dropsrvrolemember 'JackO', 'sysadmin'

Seguridad de base de datos

Los siguientes inicios de sesión pueden conectarse a una BD:

sysadmin Propietario de la BD Usuarios de la BD Cualquier inicio de sesión si existe el usuario guest y tiene permiso

Usuario de BD

Definido a nivel de BD Corresponde con un inicio de sesión

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 sesión a una base de datos:

Se crea el usuario correspondiente en esa BD

Page 14: 3.4 Definición del esquema de seguridad.docx

Pertenece al rol public

Para conceder permisos sp_grantdbaccess y sp_adduser

Para quitar el acceso sp_revokedbaccess

Para reasignar inicios de sesión 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 botón secundario en Inicios de sesión y después haga clic en Nuevo inicio de sesión.

3. En el cuadro de diálogo Inicio de sesión - Nuevo, especifique el modo de autenticación de Windows o autenticación de SQL Server.

a. Si utiliza la autenticación de Windows, escriba un nombre de inicio de sesión y seleccione la opción Conceder acceso o la opción Denegar acceso.

b. Si utiliza la autenticación de SQL Server, escriba un nombre de inicio de sesión y una contraseña y, a continuación, 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 verificación Permitir para las

bases de datos a las que esté concediendo acceso y, a continuación, haga clic en Aceptar.

Usuarios por defecto en una BDdbo:

Propietario. No puede ser borrado de la BDGuest:

Permite a usuarios que no tienen cuenta en la BD, que accedan a ella, pero hay que darle permiso explícitamente

Information_schema Permite ver los metadatos de SQL Server

sys Permite consultar las tablas y vistas del sistema, procedimientos extendidos

y otros objetos del catálogo del sistemaMostrar usuarios de una base de datos

Select * from sys.database_principals

Page 15: 3.4 Definición del esquema de seguridad.docx

Creación de un inicio de sesión

Page 16: 3.4 Definición del esquema de seguridad.docx

Asignación de un rol de servidor

Page 17: 3.4 Definición del esquema de seguridad.docx

Asignación de usuarios

Page 18: 3.4 Definición del esquema de seguridad.docx

Elementos que pueden proteger

Page 19: 3.4 Definición del esquema de seguridad.docx

Estado del inicio de sesión

Page 20: 3.4 Definición del esquema de seguridad.docx

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 botón secundario en la carpeta Seguridad, seleccione

Nuevo y seleccione Usuario. 4. En el cuadro de diálogo Usuario de la base de datos - Nuevo, en la página

General, seleccione uno de los tipos de usuario siguientes de la lista Tipo de usuario: Usuario SQL con inicio de sesión, Usuario SQL sin inicio de sesión, Usuario asignado a un certificado, Usuario asignado a una clave asimétrica 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, también puede hacer clic en los puntos suspensivos (…) para abrir el cuadro de diálogo Seleccionar usuarios o grupos.

6. En el cuadro Nombre de inicio de sesión, escriba el inicio de sesión para el usuario. Como alternativa, haga clic en los puntos suspensivos (…) para abrir el cuadro de diálogo Seleccionar inicio de sesión. Si selecciona Usuario SQL con inicio de sesión o Usuario de Windows en la lista Tipo de usuario, estará disponible Nombre de inicio de sesión.

7. En el cuadro Esquema predeterminado, especifique el esquema al que pertenecerán los objetos creados por este usuario. Como alternativa, haga clic en los puntos suspensivos (…) para abrir el cuadro de diálogo Seleccionar esquema. Si selecciona Usuario SQL con inicio de sesión, Usuario SQL sin inicio de sesión, 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 diálogo 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 asimétrica , 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 diálogo Seleccionar clave asimétrica. Si selecciona Usuario asignado a una clave asimétrica en la lista Tipo de usuario, estará disponible Nombre de clave asimétrica.

10.Haga clic en Aceptar.

Para crear un usuario de base de datos

1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos.

2. En la barra Estándar, haga clic en Nueva consulta. 3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic

en Ejecutar.

Page 21: 3.4 Definición del esquema de seguridad.docx

4. -- Creates the login AbolrousHazem with password '340$Uuxwp7Mcxo7Khy'.

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

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

Información 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 información en: sys.database_role_members

Rol Public

Page 22: 3.4 Definición del esquema de seguridad.docx

Crear un rol de BD

Page 23: 3.4 Definición del esquema de seguridad.docx

Establecer protección a asegurables

Page 24: 3.4 Definición del esquema de seguridad.docx

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 opción 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 función escalar, "ALL" significa EXECUTE y REFERENCES. Si es una función 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, otorgárselo 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 María y a Juan, insertar, modificar y borrar en la tabla autores.

GRANT INSERT, UPDATE, DELETE ON autores

TO Maria, Juan

Permitir a María actualizar el importe del préstamo.

GRANT UPDATE( importe ) ON prestamo

TO Maria

Page 25: 3.4 Definición del esquema de seguridad.docx

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 cláusula 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 heredepermisos por su pertenencia a grupos o funciones. Su sintaxis es:DENY { [ ALL [ PRIVILEGES ] ]| permission [ ( column [ ,...n ] ) ] [ ,...n ] }

Page 26: 3.4 Definición del esquema de seguridad.docx

[ 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 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

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 ejecución de los procedimientos

_ Permiten establecer el nivel de seguridad más fino (contexto)

Encriptación de datos

Page 27: 3.4 Definición del esquema de seguridad.docx

El cifrado es el proceso consistente en ofuscar los datos mediante el uso de una clave o contraseña. Esto puede hacer que los datos sean inútiles sin la clave o contraseña de descifrado correspondiente. El cifrado no resuelve los problemas de control de acceso. Sin embargo, mejora la seguridad debido a que limita la pérdida 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 información robada podría 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 más información acerca del cifrado en SQL Server._ ¿para qué?_ Evitar acceso a datos sensibles_ Evitar robo de copias de seguridad con datos sensibles_ ¿qué técnicas?_ Encriptación a nivel de columna_ Encriptación transparente (TDE), afecta a toda la BD_ ¿coste?_ Mayor sobrecarga y puede afectar al rendimiento_ Requiere una estrategia para la definición y mantenimiento de claves, passwords y certificados_ Por ello no debe considerarse para todos los datos y conexiones

Encriptación a nivel de columna_ Mediante certificados, keys o frases_ Requiere el uso de funciones específicas_ EncrypByCert() – DecryptByCert()_ EncrypyAsymkey() – DecryptByAsymKey()_ Encrypykey() – DecryptBKey()_ EncrypyPassphrase() – DecryptByPassphrase()_ Encriptación transparente (TDE), afecta a toda la BD_ No protege las comunicaciones entre aplicación cliente y servidor_ No encripta FILESCREAM_ No impide al DBA ver los datos_ Puede caer el rendimiento si conviven BD TDE y sin encriptarUSE AdventureWorks2008R2;--If there is no master key, create one now.IF NOT EXISTS(SELECT * FROM sys.symmetric_keysWHERE symmetric_key_id = 101)CREATE MASTER KEY ENCRYPTIONBY PASSWORD = 'Th15i$aS7riN&ofR@nD0m!T3%t'select top 5 * from Sales.CreditCard/*CreditCardID CardType CardNumber ExpMonth ExpYear ModifiedDate------------ -------------- -------------- -------- ------- -----------

Page 28: 3.4 Definición del esquema de seguridad.docx

1 SuperiorCard 33332664695310 11 2006 2007-08-302 Distinguish 55552127249722 8 2005 2008-01-063 ColonialVoice 77778344838353 7 2005 2008-02-154 ColonialVoice 77774915718248 7 2006 2007-06-215 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, ModifiedDateinto Sales.CreditCard_encryptfrom Sales.CreditCardwhere 1=2declare @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.CreditCardselect * from Sales.CreditCard_encrypt/*CreditCardID CardType CardNumber_encrypt ExpMonth ExpYear ModifiedDate------------ ------------- --------------------- -------- ------- -----------1 SuperiorCard 0x010000007C65089E... 11 2006 2007-08-302 Distinguish 0x010000000C624987... 8 2005 2008-01-063 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'

Page 29: 3.4 Definición del esquema de seguridad.docx

select CreditCardID,CardType,CardNumber = convert(nvarchar(25), DecryptByPassPhrase(@passphrase,CardNumber_encrypt)),ExpMonth,ExpYear,ModifiedDatefrom Sales.CreditCard_encrypt/*CreditCardID CardType CardNumber ExpMonth ExpYear ModifiedDate------------ -------------- -------------- -------- ------- -----------1 SuperiorCard 33332664695310 11 2006 2007-08-302 Distinguish 55552127249722 8 2005 2008-01-063 ColonialVoice 77778344838353 7 2005 2008-02-154 ColonialVoice 77774915718248 7 2006 2007-06-215 Vista 11114404600042 4 2005 2007-03-05

*/

Page 30: 3.4 Definición del esquema de seguridad.docx

Credenciales (motor de base de datos)

Una credencial es un registro que contiene la información de autenticación (credenciales) necesaria para conectarse a un recurso situado fuera de SQL Server. Esta información la utiliza SQL Server internamente. La mayoría de las credenciales incluyen un nombre de usuario y una contraseña de Windows.

La información almacenada en una credencial permite al usuario que se ha conectado a SQL Server mediante la autenticación 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 sesión de SQL Server. Sin embargo, un inicio de sesión de SQL Server solo se puede asignar a una credencial.

Las credenciales del sistema se crean de forma automática y se asocian a extremos específicos. Los nombres de las credenciales del sistema comienzan por dos signos de número (##).

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 número (#). 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 autenticación de salida. Esta cláusula es opcional.

FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name: Especifica el nombre de un Proveedor de administración de claves de la empresa (EKM). Para obtener más información sobre la administración de claves.

Page 31: 3.4 Definición del esquema de seguridad.docx

Ejemplo.

En el ejemplo siguiente se utiliza una cuenta creada previamente denominada User1OnEKM en un módulo EKM a través de las herramientas de administración de EKM, con un tipo de cuenta y una contraseña básicos. 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 CredentialForEKMWITH IDENTITY='User1OnEKM', SECRET='<EnterStrongPasswordHere>' FOR CRYPTOGRAPHIC PROVIDER MyEKMProvider;GO/* Modify the login to assign the cryptographic provider credential */ALTER LOGIN User1ADD CREDENTIAL CredentialForEKM;/* Modify the login to assign a non cryptographic provider credential */ALTER LOGIN User1WITH 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/seguridad%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

Page 32: 3.4 Definición del esquema de seguridad.docx

http://msdn.microsoft.com/es-es/library/aa337545.aspx#SSMSProcedure

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