sábado, 27 de agosto de 2016

Administración de la seguridad con SQL Server: II Modos de seguridad

Modos de seguridad en SQL Server



Hay dos modos de seguridad en SQL Server: El modo de Autenticación Integrada con Windows   y el Modo de Autenticación Mixta.
El modo de Autenticación Integrada permite a los usuarios que posean una cuenta en Windows acceder a SQL Server sin necesidad de validar su acceso en el servidor de bases de datos. Este modo aprovecha la integración existente entre Windows y el servidor de bases de datos. 
Además de esta técnica, SQL Server puede ser responsable de manejar y mantener las cuentas de acceso al servidor, de manera que un individuo que intente acceder a SQL Server deberá proporcionar un nombre de usuario y una palabra de paso que le validará mediante una tabla de sistema. Esta autenticación es llamada SQL Server Authentication.

Administración de la seguridad con SQL Server: II Modos de seguridad



El modo de Autenticación Mixta es una combinación de las anteriores. Los usuarios que posean una relación de confianza con el dominio en el que se encuentre el servidor y utilicen una conexión aprovechando esta relación de confianza, utilizarán la autenticación de Windows  mientras que cualquier usuario puede acceder utilizando la Autenticación de SQL Server si se ha definido identificador de acceso y una palabra de paso para él. 


Autenticación Integrada con Windows


En este tipo de autenticación SQL Server descarga en Windows la tarea de validación de la identidad del usuario. Para que esto se produzca el usuario accederá al servidor a través de una conexión en la que haya tenido que identificarse previamente ante el sistema operativo. Este tipo de conexiones se producirán cuando el usuario haya iniciado sesión desde cualquier sistema operativo cliente Windows, este tipo de conexiones se denominan conexiones de confianza (trusted connections). Este tipo de conexiones tiene numerosas ventajas, entre las que destacan:
-Cumplimiento de la máxima un usuario, una cuenta, que está en la base del sistema de seguridad de Windows.
-Características avanzadas de política de cuentas: Windows permite la especificación de políticas avanzadas de cuentas, como la expiración de contraseñas, longitud mínima, auditoría, etc.
-Mayor seguridad, gracias al envío encriptado de contraseñas a través de mecanismos sofisticados. 

Autenticación de SQL Server (SQL Server Authentication)


Este tipo de autenticación, disponible en el modo Mixto, responsabiliza a SQL Server de la validación de la identidad del usuario. Se utilizará cuan do la conexión desde la que se intenta acceder no sea de confianza (no ha habido validación de Windows)  lo que se denomina una conexión untrusted. En este modo el usuario deberá especificar explícitamente un nombre de usuario (un identificador de inicio de sesión) y una contraseña que estarán almacenadas en la tabla syslogins de la base de datos master. 
Este tipo de autenticación tiene su razón de ser en conexiones a través de Internet, también resulta necesario cuando en nuestra red existan clientes que motiven conexiones no de confianza. 

Estrategias de seguridad 


Existen diversas estrategias para facilitar la administración y mejorar las prestaciones de seguridad del SQL Server. Veamos algunas. 

Seguridad basada en funciones 
Cuando existan diversos usuarios que precisen de permisos similares es conveniente basar la seguridad en grupos de usuarios, más que en usuarios individuales. Esto reducirá el número de sentencias necesarias.

Utilización de vistas
Las vistas permiten limitar el acceso y modificación de los usuarios a los datos de una tabla. Una vista es una tabla virtual que sólo presenta la información que se desee hacer visible. Pueden limitarse y filtrarse las filas las columnas que desean mostrarse, haciendo así que un usuario tenga acceso restringido a los datos.  Cuando se otorgan permisos a una vista no es necesario otorgar permisos para las tablas que la sustentan. Esto puede simplificar la administración. 

Utilización de procedimientos almacenados
El uso de procedimientos para acceder y modificar datos es que los usuarios sólo necesitan tener el permiso EXECUTE para ejecutarlo, no precisando que los usuarios tengan accesos a las tablas y vistas que conforman el procedimiento. 

Triggers para controlar cambios en los datos
Los triggers son sentencias SQL que se ejecutan de forma automática cuando una tabla se ve modificada mediante las cláusulas INSERT, UPDATE o DELETE. Al ser ejecutados de manera automática, pueden ser adecuados para controlar si se han producido cambios en las tablas y quién los ha producido. 

Figuras de seguridad


Identificadores de inicio de sesión (login id)
Un identificador de Inicio de Sesión (login id) es el pasaporte para acceder al servidor SQL Server. Este acceso,  no asegura que pueda consultarse ni modificarse algún dato, sino simplemente que el servidor nos habilitará para establecer una conexión con sus servicios. Cada Identificador de Inicio de Sesión está asociado a una contraseña.  Hay que especificar una palabra de Paso para cada identificador de acceso.

La tabla syslogins
Cuando se crea un nuevo identificador de inicio de sesión, el sistema  añade un registro a la tabla de sistema syslogins. En las columnas de esta tabla se almacenan un buen número de informaciones relativas a los identificadores de acceso, que pasamos a detallar:

sid:  Número único que identifica al usuario. 

status: Reservado por el sistema. 

createdate: Fecha en la que se creó el identificador de inicio de sesión.

updatedate: Fecha de la última modificación del login id. 

dbname: Nombre de la base de datos por defecto a la que tiene acceso el usuario

name:  Nombre del login id. Se utiliza únicamente a título descriptivo, para acceder a las tablas el que realmente vale es el sid.

password: Contraseña del usuario. Aparece encriptada para que no pueda leerse directamente consultando la tabla. 

language: Lenguaje por defecto para el usuario. 

denylogin: Vale 1 si el identificador representa a un usuario Windows al que se le ha denegado explícitamente el acceso al servidor. 

hasaccess: Vale 1 si el identificador representa a un usuario Windows  al que se le ha concedido explícitamente el acceso al servidor.

isntname: Vale 1 si el identificador representa a un usuario Windows  y 0 si representa a un identificador de SQL Server. 

isntgroup: Vale 1 si el identificador representa a un grupo Windows. 

isntuser: Vale 1 si el identificador representa a un usuario Windows.

sysadmin: Vale 1 si el identificador representa a un usuario perteneciente a la función de servidor sysadmin, es decir, se trata de un administrador. 

serveradmin: Vale 1 si el identificador representa a un usuario perteneciente a la función de servidor serveradmin. 

setupadmin: Vale 1 si el identificador representa a un usuario perteneciente a la función de servidor setupadmin.

processadmin: Vale 1 si el identificador representa a un usuario perteneciente a la función de servidor processadmin. 

diskadmin: Vale 1 si el identificador representa a un usuario perteneciente a la función de servidor diskadmin. 

 dbcreator: Vale 1 si el identificador representa a un usuario perteneciente a la función de base de datos dbcreator.

Durante el proceso de acceso de un usuario a SQL Server el sistema consulta esta tabla para comprobar que el identificador que el usuario proporciona existe y que la contraseña es la que se almacena en una columna determinada de la tabla.

Contraseñas (passwords) 


La contraseña o pasisword es el medio que utiliza SQL Server para autentificar la identidad de los usuarios que intentan acceder al sistema. La contraseña podrá contener cualquiera de los caracteres alfanuméricos, así como los símbolos especiales. Su longitud no está marcada de manera estricta en SQL Server. La única restricción es que no puede exceder de 128 caracteres.

Modificación de contraseña
La contraseña puede ser modificada utilizando el procedimiento almacenado  sys.sp_password.

sp_password contraseña antigua,  contraseña nueva [, login_id]

Los usuarios sólo tienen derecho a modificar su propia contraseña. El administrador puede modificar las contraseñas de todos los usuarios. Si un usuario añade al comando un login_id diferente del suyo, el sistema no aceptará el cambio de contraseña y mostrará un mensaje de error.

Identificadores de inicio de sesión incorporados: sa 


El servidor tiene definidos dos identificadores de inicio de sesión.
BUILTIN/Administradores: Es el grupo de administradores de Windows incluidos automáticamente en la función de servidor sysadrnin. 
sa: Este usuario es el administrador del sistema, también asignado a la función de servidor sysadinin. Se mantiene por compatibilidad con versiones anteriores. El usuario no puede ser modificado, desde el punto de vista de los permisos que detenta. Se recomienda que este usuario sea utilizado lo menos posible, y que cada usuario Administrador Windows acceda con su propio identificador.

Identificación de acceso a bases de datos 


Un segundo nivel de seguridad, una vez que un usuario ha ganado acceso a SQL Server, es restringir su acceso a algunas de entre las bases de datos existentes. Para ello se define una figura del sistema de seguridad denominado usuario de base de datos. Esta Figura es la que se utiliza para conceder permisos a los usuarios que tienen pasaporte de entrada en SQL Server para llevar a cabo ciertas tareas, y no otras, en algunas de las bases de datos. Cada identificador de acceso estará o no facultado para acceder a una base de datos en función de si dispone en ella de un usuario de base de datos asociado, y los permisos que tendrá serán los que se le hayan concedido al usuario en cuestión. 

Usuarios de bases de datos (username)

Un usuario de base de datos es un identificador que, en una determinada base de datos, identifica a una entidad que desea acceder a los datos almacenados en la misma. Este usuario se conoce usualmente usuario, o username.

Relación usuario-identificador 


Cuando queremos que un usuario de SQL Server tenga acceso a una base de datos, asignamos un nombre de usuario de esa base de datos a su identificador de acceso a SQL Server. Los usuarios se agrupan en funciones de bases de datos. Esta agrupación facilita la concesión conjunta de permisos a usuarios con perfiles similares. 
La vinculación entre identificadores de inicio de sesión y usuarios de bases de datos es necesaria tanto si se utiliza autenticación Windows como si la autenticación es SQL Server.
Para vincular varios usuarios de Windows simultáneamente se crean usuarios de bases de datos para un grupo de cuentas Windows.

La tabla sysusers 
Esta tabla, análoga a syslogins para los identificadores de acceso, contiene la información relativa a los usernames y los grupos. Cada nuevo usuario y grupo que se añade genera una nueva fila en esta tabla. 
Al contrario que syslogins, esta fila es única para todo el servidor y pertenece a la base de datos master, existe una tabla sysusers para base de datos, que contiene los usuarios definidos para ella. 
Las siguientes son las columnas de la tabla sysusers: 

uid: Identificador único del usuario, en la base de datos.

gid: Identificador del grupo de usuario. Existe por compatibilidad.

Name: Nombre del usuario o grupo. 

Password: Contraseña del usuario. Aparece encriptada para que no pueda leerse directamente consultando la tabla. 

isaliased: 1 si existe un alias para este usuario. Existe por compatibilidad. 

createdate: Fecha en la que se creó el usuario. 

updatedate: Fecha de la última modificación del usuario. 

islogin: Vale 1 si el usuario está asociado a un identificador de acceso sea cual sea su modo de autenticación. 

hasdbaccess: Vale 1 si el identificador representa a un usuario al que se le ha concedido acceso a la base de datos.

isntname: Vale 1 si el identificador representa a un usuario Windows y 0 si representa a un identificador de SQL Server. 

isntgroup: Vale 1 si el identificador representa a un grupo de Windows.

isntuser: Vale 1 si el identificador representa a un usuario Windows.

issqlrole: Vale 1 si el usuario representa a una función de base de datos. 

isapprole: Vale 1 si el usuario representa a una función de aplicación.

issqluser: Vale 1 si el usuario representa a un usuario de SQL Server. 

Usuarios especiales 


Propietario de Base de Datos (DBO)
El propietario de la base de datos (dbo) es, por definición, el creador de la misma, todos los identificadores de acceso que pertenecen la función de servidor sysadmin, automáticamente son vinculados a este usuario en todas las bases de datos del sistema. Todos y sólo los objetos creados por los identificadores de acceso de sysadmin, pertenecen al dbo.
El dbo posee privilegios para realizar todas las operaciones de SQL sobre la base de datos, pudiendo, además, crear y gestionar grupos de usuarios y transmitir a estos los permisos para acceder y ejecutar comandos sobre dicha base de datos.
No es posible eliminar este usuario de la base de datos.
No hay que confundir el dbo con la función de base de datos dbo_owner. Esta última sólo tiene ámbito en su propia base de datos, mientras que dbo es un usuario genérico que existe en todas las bases de datos y al que están vinculados todos los identificadores de la función de servidor sysadmin. 

Propietarios de objetos de base de datos (DBOO)
Es el usuario que ha creado un objeto de una base de datos. Posee permisos para utilizar cualquier comando sobre ese objeto (SELECT, UPDATE,...). Este usuario no existe explícitamente, al contrario de lo que sucede con dbo.
Para transferir la propiedad de un objeto deberemos utilizar el procedimiento almacenado sp_changeobjectowner:

sp_changeobjectowner 'objeto', 'nuevo propietario’

Usuario invitado (guest)
Este usuario tiene el objetivo de permitir a cualquier usuario con permiso para conectarse a SQL Server; acceder a la misma, pero con privilegios limitados. 
Cuando un usuario intente acceder a una base de datos para la que no posee un usuario, se le dará acceso con el identificador guest. 

No hay comentarios:

Publicar un comentario