Autorización y seguridad en SQL server
Resumen. A lo largo de los años la seguridad en las bases de datos a tenido una gran importancia debido a los diferentes ataques de gran escala que se han llevado a cabo por diferentes hackers del mundo. En cada versión de SQL Server se ha integrado diferentes características para mejorar la seguridad y proteger las bases de datos. Pero a la hora de establecer la seguridad en nuestras bases de datos muchas veces lo hacemos de manera predeterminada de Windows, esto nos convierte en blanco fácil para los ataques. Es por ello que debemos establecer una seguridad configurada por nosotros mismos para evitar cualquier posible vulnerabilidad que nos convierta en la próxima víctima de estos ataques. Este artículo presenta una serie de características para configurar la seguridad en nuestras bases de datos.
Abstract.over the years, security in databases has a great importance due to the different large-scale attacks that have been carried out by different hackers in the world. In each version of SQL Server, it has been integrated with different features to improve security and protect databases. But when establishing security in our databases many times we do it by default in Windows, this makes us an easy target for attacks. That is why we would have put in a secure configuration for ourselves the same for the next victim. This article presents a series of features to configure security in our databases.
Palabras Claves. Seguridad, SQL Server, Roles, Grant, Revoke, Procedimientos almacenados.
seguridad de La Información
En la Seguridad de la Información el objetivo de la protección son los datos mismos y trata de evitar su modificación non-autorizado y para protegerlos de una posible corrupción durante todo su ciclo de vida. La protección debe garantizar en primer lugar la confidencialidad, integridad y disponibilidad de los datos, sin embargo, existen más requisitos como por ejemplo la autenticidad entre otros.Seguridad de la Información incluye conceptos como encriptación de datos, tokenización y prácticas de gestión de claves que ayudan a proteger los datos en todas las aplicaciones y plataformas de una organización.
El motivo o el motor para implementar medidas de protección, que responden a la Seguridad de la Información, es el propio interés de la institución o persona que maneja los datos, porque la pérdida o modificación de los datos, le puede causar un daño (material o inmaterial).
Hoy en día, organizaciones de todo el mundo invierten fuertemente en la tecnología de información relacionada con la ciberdefensa con el fin de proteger sus activos críticos: su marca, capital intelectual y la información de sus clientes.
Tendencias recientes han demostrado que los ataques de ransomware están aumentando en frecuencia y en gravedad. Se ha convertido en un negocio en auge para ladrones cibernéticos y hackers, que acceden a la red y secuestran datos y sistemas. En los últimos meses, grandes empresas y otras organizaciones, así como también usuarios particulares, han caído víctimas de este tipo de ataques y han tenido que pagar el rescate o correr el riesgo de perder datos importantes.
SEGURIDAD SQL SERVER
SQL Server tiene muchas características que admiten la creación de aplicaciones de base de datos seguras.
Las consideraciones comunes de seguridad, como el robo de datos o el vandalismo, se aplican independientemente de la versión de SQL Server que se use. La integridad de los datos también se debe considerar como un problema de seguridad. Si los datos no están protegidos, es posible que acaben perdiendo su valor si se permite la manipulación de datos ad hot y los datos se modifican sin intención o de forma malintencionada con valores incorrectos o bien se eliminan por completo. Además, a menudo existen requisitos legales que se deben cumplir, como el almacenamiento correcto de información confidencial. El almacenamiento de determinados tipos de datos personales está totalmente prohibido, en función de las leyes que se apliquen en una jurisdicción determinada.
Cada versión de SQL Server integra diferentes ca*a Es importante comprender que las características de seguridad no pueden garantizar por sí solas una aplicación de base de datos segura. Cada aplicación de base de datos es única en lo que respecta a los requisitos, el entorno de ejecución, el modelo de implementación, la ubicación física y el rellenado por parte del usuario. Algunas aplicaciones que son locales en cuanto al ámbito pueden necesitar una seguridad mínima, en tanto que otras aplicaciones locales o las aplicaciones implementadas en Internet pueden precisar medidas estrictas de seguridad y supervisión y evaluación continuas.
Los requisitos de seguridad de una aplicación de base de datos de SQL Server se deben tener en cuenta en el tiempo de diseño, no a posteriori. La evaluación de las amenazas en las primeras fases del ciclo de desarrollo permite reducir al mínimo los posibles daños cuando se detecte una vulnerabilidad.
CONFIGURACIONES DE SEGURIDAD EN SQL SERVER
A continuación presentamos los formas de dar permisos en SQL server utilizando la función grant y revoke el cual nos ayudaran a dar privilegios a un usuario en la tabla o en tablas posteriormente la creación y asignación de usuarios a nuestro gestor de base de datos.
PERMISOS Grant y Revoke (permisos de objeto de Transact-SQL)
Los comandos DCL se utilizan para aplicar la seguridad de la base de datos en un entorno de base de datos de múltiples usuarios. Dos tipos de comandos DCL son GRANT y REVOKE. Solo el administrador de la base de datos o el propietario del objeto de base de datos puede proporcionar / eliminar privilegios en un objeto de base de datos a continuación unas definiciones.
Grant:
Concede permisos para una tabla, vista, función con valores de tabla, procedimiento almacenado, procedimiento almacenado extendido, función escalar, función de agregado, cola de servicio o sinónimo.
Revoke:
Revoca permisos en una tabla, vista, función con valores de tabla, procedimiento almacenado, procedimiento extendido almacenado, función escalar, función de agregado, cola de servicio o sinónimo.
Objeto:Un objeto es un elemento protegible de nivel de esquema que contiene el esquema que es su entidad primaria en la jerarquía de permisos. La mayoría de los permisos limitados y específicos que se pueden conceder para un objeto se muestran en la siguiente tabla, junto con los permisos más generales que los incluyen por implicación.
Permiso de objeto | Implícito en el permiso de objeto | Implícito en el permiso del esquema |
ALTER | CONTROL | ALTER |
CONTROL | CONTROL | CONTROL |
DELETE | CONTROL | DELETE |
Ejecute | CONTROL | Ejecute |
INSERT | CONTROL | INSERT |
RECEIVE | CONTROL | CONTROL |
REFERENCES | CONTROL | REFERENCES |
SELECT | RECEIVE | SELECT |
TAKE OWNERSHIP | CONTROL | CONTROL |
UPDATE | CONTROL | UPDATE |
VIEW CHANGE TRACKING | CONTROL | VIEW CHANGE TRACKING |
VIEW DEFINITION | CONTROL | VIEW DEFINITION |
-- asignar acceso para crear una tabla al usuario 4
use practica3
GO
GRANT CREATE TABLE TO Usuario4
GO
-- Asignar privilegios ALL al usuario4
USE practica3
GO
GRANT ALL TO Usuario4
GO
-- Revocar Privilegios ALL al suario 4
use practica3
GO
REVOKE ALL TO Usuario4
GO
Roles y Usuarios sql server
En sql server creamos tanto usuarios como roles para tener un mejor control de nuestra base de datos cuando nos referimos a crear un usuario es cuando tenemos nuestras credenciales ya sea desde el mismo gestor de base de datos utilizando a nivel de sql server que están los inicios de sección y los roles del servidor o utilizando el nivel de Windows que incluye los grupos de Windows cuantas de usuario de dominio o cuentas locales las cuales son las opciones predeterminadas al instalar sql server. Una vez que tenemos los usuarios y también inicios de sección podemos asignarles roles a dichos usuarios. En sql server se contemplan 3 tipos de roles el primero son los roles a nivel de servidor el segundo son los roles a nivel de base de datos y el tercero son los roles personalizados los cuales los podemos programar para que hagan una tarea predeterminada.Usuarios e inicios de sección
Los usuarios en sql server son los que se encargan de administrar la base de datos y pueden estar asignados a un inicio de sección el cual es la identidad de la persona o proceso que se está conectado a una instancia de SQL Server. Para crear un nuevo inicio de sección utilizamos el siguiente CREATE LOGIN usuario WITH PASSWORD =¨*******¨ como se muestra en el siguiente ejemplo.-- Crear inicio de sección prueba
CREATE LOGIN prueba
WITH PASSWORD = '123455678'
GO
También podemos usar SQL Server Management Studio para hacerlo mediante la GUI o la interfaz gráfica ahora que tenemos el inicio de sección nos toca agregar un usuario a la base de datos actual y de los cuales hay 12 tipos como se enumeran a continuación.
- Usuarios basados en inicios de sesión en la base de datos maestra: se trata del tipo más habitual de usuario.
- Usuario basado en un inicio de sesión basado en un usuario de Windows.
- Usuario basado en un inicio de sesión basado en un grupo de Windows.
- Usuario basado en un inicio de sesión mediante autenticación de SQL Server.
- Usuarios que se autentican en la base de datos: solo se admiten en una base de datos independiente.
- Usuario basado en un usuario de Windows sin inicio de sesión.
- Usuario basado en un grupo de Windows sin inicio de sesión.
- Usuario de base de datos independiente con contraseña.
- Usuarios basados en entidades de seguridad de Windows que conectan a través de inicios de sesión de grupo de Windows
- Usuario basado en un usuario de Windows sin inicio de sesión, pero que se puede conectar a Motor de base de datos mediante la pertenencia a un grupo de Windows.
- Usuario basado en un grupo de Windows sin inicio de sesión, pero que se puede conectar a Motor de base de datos mediante la pertenencia a un grupo distinto de Windows.
- Usuarios que no se pueden autenticar: estos usuarios no pueden iniciar sesión en SQL Server ni en Base de datos SQL.
- Usuario sin inicio de sesión. No puede iniciar sesión, pero se le pueden conceder permisos.
- Usuario basado en un certificado. No puede iniciar sesión, pero se le pueden conceder permisos y puede firmar módulos.
- Usuario basado en una clave asimétrica. No puede iniciar sesión, pero se le pueden conceder permisos y puede firmar módulos.
Ejemplo:
Creación de un inicio de sección y su respectiva asignación donde creamos el inicio de sección prueba y creamos el usuario miguel el cual posteriormente lo asignamos al inicio de sección prueba. Con esto nos damos cuenta que podemos tener un usuario distinto a un inicio de sección y viceversa o mejor aún grupos de usuario amarrados a un inicio de sección.
-- Crear inicio de sección prueba y asignarle inicio de sección prueba
CREATE LOGIN prueba
WITH PASSWORD = '123455678'
GO
create user[miguel] for login [prueba]
go
Roles a nivel de servidor
Los roles de servidor o roles o también llamados roles fijos son los que sql server asigna permisos y los cuales no se pueden cambiar. Los roles fijos de servidor se proporcionan con fines de comodidad y de compatibilidad con versiones anteriores.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
|
Dbcreator | Crea y modifica base de datos |
Diskadmin | Administra los archivos de datos |
Proccessadmin | Administra los procesos de sql server |
SrcurityAdmin | Administra los inicios de sección |
Serveradmin | Opciones de configuración del servidor |
Setupadmin | Instala la replicación |
Sysadmin | Realiza cualquier actividad |
Roles a nivel de base datos
Los roles de nivel de base de datos se aplican a toda la base de datos en lo que respecta a su ámbito de permisos. Existen dos tipos de roles de nivel de base de datos en SQL Server: los roles fijos de base de datos, que están predefinidos en la base de datos, y los roles flexibles de base de datos, que pueden crearse.Los roles fijos de base de datos se definen en el nivel de base de datos y existen en cada una de ellas. Los miembros de los roles de base de datos db_owner pueden administrar la pertenencia a roles fijos de base de datos. Hay también algunos roles fijos de base de datos con fines especiales en la base de datos msdb.
Puede agregar cualquier cuenta de la base de datos y otros roles de SQL Server a los roles de nivel de base de datos. Cada miembro de un rol fijo de base de datos puede agregar otros inicios de sesión a ese mismo rol.
Rol fijo de servidor
|
Permiso en el nivel de servidor
|
Public | Mantine los permisos en forma predeterminada para todos los usuarios |
Db_owner | Realiza cualquier actividad en la BD. Se convierte en un propietario de la BD |
Db_accessadmin | Agrega o retira usuarios y/o roles |
Db_ddladmin | Agrega, modifica o elimina objetos |
db_SecurityAdmin | Asigna permisos sobre objetos o sobre sentencias |
db_backupoperator | Realiza operaciones de Backup y Restore de la BD |
db_datareader | Lee información desde cualquier tabla |
db_datawriter | Agrega, modifica o elimina datos de cualquier tabla |
db_denydatareader | No puede leer la información de ninguna tabla |
db_denydatawriter | No puede modificar la información de ninguna tabla |
Ejemplo: En este ejemplo asignamos el rol db_owner al usuario 4.
GO
sp_addrolemember 'db_owner','Usuario4'
GO
Procedimientos almacenados predefinidos
Un procedimiento almacenado de SQL Server es un grupo de una o varias instrucciones en el cual se pueden hacer muchas actividades administrativas e informativas. Los procedimientos se asemejan a las construcciones de otros lenguajes de programación, porque pueden:- Aceptar parámetros de entrada y devolver varios valores en forma de parámetros de salida al programa que realiza la llamada.
- Contener instrucciones de programación que realicen operaciones en la base de datos. Entre otras, pueden contener llamadas a otros procedimientos.
- Devolver un valor de estado a un programa que realiza una llamada para indicar si la operación se ha realizado correctamente o se han producido errores, y el motivo de estos.
Ejemplo:
-- llamar a un procedimiento almacenado para asignar un rol al usuario4
use practica3
GO
sp_addrolemember 'db_owner','Usuario4'
go
Los procedimientos almacenados del sistema se agrupan en las categorías que aparecen en la siguiente tabla.
Categoría |
Description
|
Procedimientos almacenados de replicación geográfica activa | Usar para administrar para administrar las configuraciones de replicación geográfica activa de la base de datos de SQL Azure |
Procedimientos almacenados del catálogo | Se utilizan para implementar las funciones del diccionario de datos ODBC y aislar las aplicaciones ODBC de los cambios en las tablas subyacentes del sistema. |
Procedimientos almacenados de captura de datos modificados | Permiten habilitar, deshabilitar o informar sobre los objetos de la captura de datos modificados. |
Procedimientos almacenados de cursor | Se utilizan para implementar la funcionalidad de variable de cursor. |
Procedimientos almacenados del recopilador de datos | Se utiliza para trabajar con el recopilador de datos y los componentes siguientes: conjuntos de recopilación, elementos de recopilación y tipos de recopilación. |
Procedimientos almacenados del motor de base de datos | Se utilizan para el mantenimiento general de Motor de base de datos de SQL Server. |
Correo electrónico de base de datos almacenados procedimientos ( Transact-SQL ) | Se utilizan para realizar operaciones de correo electrónico desde una instancia de SQL Server. |
Procedimientos almacenados de planes de mantenimiento de base de datos | Se utilizan para configurar las tareas de mantenimiento fundamentales necesarias para administrar el rendimiento de las bases de datos. |
Procedimientos almacenados de consultas distribuidas | Se utilizan para implementar y administrar consultas distribuidas. |
FileStream y procedimientos almacenados de FileTable ( Transact-SQL ) | Se usa para configurar y administrar las características FILESTREAM y FileTable. |
Procedimientos almacenados de seguridad | Se utilizan para administrar la seguridad. |
Procedimientos de copia de seguridad de instantáneas | Usar para eliminar la copia de seguridad FILE_SNAPSHOT junto con todas sus instantáneas o para eliminar una instantánea de archivo de copia de seguridad individual. |
Procedimientos almacenados de índice espacial | Se utiliza para analizar y mejorar el rendimiento de la indización de los índices espaciales. |
Procedimientos almacenados del Agente SQL Server | Lo utiliza SQL Server Profiler para supervisar el rendimiento y la actividad. |
Procedimientos almacenados de SQL Server Profiler | Los utiliza el Agente SQL Server para administrar actividades programadas y controladas por eventos. |
Ajustar la base de datos almacenada procedimientos | Se utiliza para administrar las bases de datos de stretch. |
Procedimientos almacenados de tablas temporales | Uso de las tablas temporales |
Procedimientos almacenados de XML | Se utilizan para la administración del texto XML. |
CONCLUSIONES
- Al utilizar las funciones GRANT y REVOKE como usuario administrador asignamos los permisos a un determinado usuario ello nos ayuda a tener un mejor control de nuestros datos ya que ese usuario no podrá hacer otras funciones en nuestro sistema.
- Pudimos distinguir entre los inicios de sección y los usuarios los cuales y asignarles inicios de sección a un usuario o a un grupo. También en la parte de roles vimos como existen los roles de servidor y los de base de datos en los cuales debemos tener mucho cuidado a la hora de asignarlos porque de ello depende la seguridad de nuestra base de datos. Asignar un rol a un usuario que no los necesita como por ejemplo el de eliminar y actualizar esto traería consecuencias graves en la base de datos el día que ese usuario intente acceder a esos permisos.
- El uso de procedimientos almacenados predefinidos en seguridad nos ayudan a crear usuarios, agregar roles y asignar permisos de una forma súper sencilla al no tener que programar nosotros mismos así ahorramos tiempo.
- Al crear usuarios con roles y asignación de permisos bloqueamos un gran agujero de seguridad ya que no dejamos las credenciales por defecto las cuales utilizando herramientas de hacker como kali Linux es muy fácil atacar la base de datos.
ReferencIAS
https://msdn.microsoft.com/es-es/library/ms189121(v=sql.120).aspxhttps://technet.microsoft.com/es-es/library/ms175892(v=sql.105).aspx
https://msdn.microsoft.com/es-es/library/ms173463(v=sql.120).aspx
https://msdn.microsoft.com/es-es/library/aa337545(v=sql.120).aspx
https://msdn.microsoft.com/es-es/library/ms187750(v=sql.120).aspx
Fundamentos de Bases de Datos 5ta edición – Silberschatz
https://docs.microsoft.com/es-es/sql/t-sql/statements/revoke-object-permissions-transact-sql
http://beginner-sql-tutorial.com/sql-grant-revoke-privileges-roles.htm
https://docs.microsoft.com/es-es/sql/relational-databases/system-stored-procedures/system-stored-procedures-transact-sql