Autor: Oscar Morán

Cuentos de miedo para influencers

Cuentos de miedo para influencers

Cuentos de miedo para influencersLa vida de un influencer está llena de retos, pero también de momentos que pueden ser realmente aterradores. Entre seguidores furiosos, ataques cibernéticos y la presión constante de mantenerse relevante, los influencers se enfrentan a situaciones que pueden poner a prueba sus nervios de acero. En esta entrada de blog, exploraremos algunas de las historias más escalofriantes que solo los influencers pueden entender.

¿Te apasiona el mundo de las redes sociales y te fascina un buen susto?

Entonces «Cuentos de Miedo para Influencers: Historias de Terror en el Mundo Digital» es la lectura perfecta para ti. Este libro te sumergirá en un mundo donde la fama se mezcla con el terror, creando una atmósfera espeluznante que te mantendrá en vilo hasta la última página.

A través de relatos cortos y escalofriantes, te adentrarás en situaciones donde los seguidores, los trolls y las plataformas sociales se convierten en elementos perturbadores que amenazan la tranquilidad de los protagonistas. Imagina un seguidor obsesionado que logra hackear todas tus cuentas, o un algoritmo que desarrolla una conciencia propia y comienza a manipular tu contenido de manera siniestra. Estas son solo algunas de las pesadillas digitales que te esperan en este libro.

Cuentos de miedo para influencers
Cuentos de miedo para influencers

«Cuentos de Miedo para Influencers» no solo te entretendrá con sus historias aterradoras, sino que también te hará reflexionar sobre los peligros potenciales de la exposición en redes sociales y la dependencia que tenemos de ellas.

Si eres un amante del mundo digital, del terror y de las historias originales, este libro es para ti. No te pierdas la oportunidad de vivir una experiencia de lectura única y espeluznante.

Aquí te dejo algunos aspectos que me han gustado del libro:

La originalidad de las historias: Las tramas no son las típicas historias de terror, sino que giran en torno a la vida de los influencers y los posibles peligros del mundo digital, lo que le da un toque fresco y original al género.

La atmósfera espeluznante: El autor logra crear una atmósfera realmente inquietante a través de una narrativa descriptiva y llena de suspense.

Los personajes memorables: A pesar de ser historias cortas, los personajes están bien desarrollados y resultan creíbles y cercanos al lector.

En definitiva, «Cuentos de Miedo para Influencers» es un libro muy recomendable para todos aquellos que buscan una lectura entretenida, original y aterradora.

Conclusión

El mundo de los influencers está lleno de desafíos únicos que pueden ser realmente aterradores. Desde críticas devastadoras hasta amenazas de seguridad, los influencers viven constantemente al filo de la navaja en un entorno digital que puede volverse en su contra en cualquier momento.

Enlaces de interés:

Auditoría descubriendo las Conexiones en SQL Server

Archivos MDF y NDF en SQL Server: Guía Completa

¿Es Necesario Hacer un Refresco de una Vista en SQL Server?

Generando Script de creación de Usuarios en SQL Server

Cuentos de miedo para informáticos

Cuentos de miedo para Informáticos: Historias de terror para informáticos

Cuentos de miedo para Informáticos, la vida de un informático está llena de retos, pero también de momentos que pueden ser realmente aterradores. Entre servidores caídos, fallos de seguridad y misteriosas líneas de código, los profesionales de la tecnología se enfrentan a situaciones que pueden poner a prueba sus nervios de acero. En esta entrada de blog, exploraremos algunas de las historias más escalofriantes que solo los informáticos pueden entender.

¿Te apasiona la informática y te fascina un buen susto?

Entonces «Cuentos de miedo para Informáticos: Historias de terror para informáticos» es la lectura perfecta para ti. Este libro te sumergirá en un mundo donde la tecnología se mezcla con el terror, creando una atmósfera espeluznante que te mantendrá en vilo hasta la última página.

A través de relatos cortos y escalofriantes, te adentrarás en situaciones donde los ordenadores, los virus informáticos y la inteligencia artificial se convierten en elementos perturbadores que amenazan la tranquilidad de los protagonistas. Imagina un virus que cobra vida propia y siembra el caos en un sistema operativo, o una inteligencia artificial que desarrolla una conciencia propia y se vuelve contra sus creadores. Estas son solo algunas de las pesadillas tecnológicas que te esperan en este libro.

Cuentos de miedo para informáticos
Cuentos de miedo para informáticos

«Cuentos de miedo para Informáticos» no solo te entretendrá con sus historias aterradoras, sino que también te hará reflexionar sobre los peligros potenciales de la tecnología y la dependencia que tenemos de ella.

Si eres un amante de la informática, del terror y de las historias originales, este libro es para ti. No te pierdas la oportunidad de vivir una experiencia de lectura única y espeluznante.

Aquí te dejo algunos aspectos que me han gustado del libro:

  • La originalidad de las historias: Las tramas no son las típicas historias de terror, sino que giran en torno a la informática y sus posibles peligros, lo que le da un toque fresco y original al género.
  • La atmósfera espeluznante: El autor logra crear una atmósfera realmente inquietante a través de una narrativa descriptiva y llena de suspense.
  • Los personajes memorables: A pesar de ser historias cortas, los personajes están bien desarrollados y resultan creíbles y cercanos al lector.

En definitiva, «Cuentos de miedo para Informáticos» es un libro muy recomendable para todos aquellos que buscan una lectura entretenida, original y aterradora.

Conclusión

El mundo de la informática está lleno de desafíos únicos que pueden ser realmente aterradores. Desde fallos técnicos hasta amenazas de seguridad, los informáticos se enfrentan a situaciones que pueden ser tan escalofriantes como cualquier historia de terror. Sin embargo, es en estos momentos de crisis donde los verdaderos profesionales demuestran su valía, encontrando soluciones creativas y efectivas para superar cualquier obstáculo.

Enlaces de interés:

¿Qué es un SGBDR SQL Server? Todo lo que Necesitas Saber

Identificar Objetos No Utilizados en su Base de Datos SQL Server

Insertar Varias Filas en SQL Server: Simplifica tu Trabajo

SQL login failed for user ‘NT AUTHORITY \ ANONYMOUS LOGIN’

COMPROBANDO FRAGMENTACIÓN EN FULLTEXT SQL

Guía Completa para Implementar FULLTEXT en SQL

Fragmentación FULLTEXT, es una actividad y característica poderosa de SQL que permite realizar búsquedas eficientes y relevantes en grandes volúmenes de datos textuales. A continuación, te presentamos ejemplos detallados y explicados sobre cómo crear y gestionar catálogos e índices FULLTEXT en SQL Server.

Creación de un Catálogo FULLTEXT

Un catálogo FULLTEXT es un contenedor lógico que organiza los índices FULLTEXT. El primer paso para utilizar FULLTEXT es crear un catálogo.

Crear un Catálogo FULLTEXT

La sintaxis para crear un catálogo FULLTEXT es la siguiente:

CREATE FULLTEXT CATALOG [catalog_name] WITH ACCENT_SENSITIVITY = OFF
AUTHORIZATION [dbo];
GO
  • [catalog_name]: Nombre del catálogo FULLTEXT.
  • ACCENT_SENSITIVITY: Define si el catálogo es sensible a acentos. En este caso, está desactivado (OFF).
  • AUTHORIZATION [dbo]: Define el propietario del catálogo. El propietario por defecto es dbo.

Ejemplo de Creación de Catálogo FULLTEXT

CREATE FULLTEXT CATALOG [t1_texto] WITH ACCENT_SENSITIVITY = OFF
AUTHORIZATION [dbo];
GO

En este ejemplo, creamos un catálogo llamado t1_texto con sensibilidad a acentos desactivada y dbo como propietario.

Creación de un Índice FULLTEXT

Una vez creado el catálogo, el siguiente paso es crear un índice FULLTEXT en una tabla específica.

Crear un Índice FULLTEXT

La sintaxis para crear un índice FULLTEXT es la siguiente:

CREATE FULLTEXT INDEX ON [schema_name].[table_name] 
KEY INDEX [PK_name]
ON ([catalog_name])
WITH (CHANGE_TRACKING AUTO);
GO

USE [database_name];
GO

ALTER FULLTEXT INDEX ON [schema_name].[table_name] ADD ([column_name]);
GO

ALTER FULLTEXT INDEX ON [schema_name].[table_name] ENABLE;
GO
  • [schema_name].[table_name]: Esquema y nombre de la tabla.
  • KEY INDEX [PK_name]: Nombre de la clave primaria utilizada como clave única para el índice FULLTEXT.
  • [catalog_name]: Nombre del catálogo FULLTEXT donde se almacenará el índice.
  • CHANGE_TRACKING AUTO: Habilita el seguimiento automático de cambios para mantener actualizado el índice FULLTEXT.
  • [database_name]: Nombre de la base de datos.
  • [column_name]: Nombre de la columna a añadir al índice FULLTEXT.

Ejemplo de Creación de Índice FULLTEXT

CREATE FULLTEXT INDEX ON [dbo].[t1] 
KEY INDEX [PK_c1]
ON ([t1_texto])
WITH (CHANGE_TRACKING AUTO);
GO

USE [BBDD_donde_se_creo];
GO

ALTER FULLTEXT INDEX ON [dbo].[t1] ADD ([c2]);
GO

ALTER FULLTEXT INDEX ON [dbo].[t1] ENABLE;
GO

En este ejemplo, creamos un índice FULLTEXT en la tabla t1 del esquema dbo utilizando la clave primaria PK_c1. El índice se almacenará en el catálogo t1_texto y tendrá seguimiento automático de cambios. Luego, añadimos la columna c2 al índice y lo habilitamos.

Mantenimiento de Índices FULLTEXT

Con el tiempo, los índices FULLTEXT pueden fragmentarse, lo que puede afectar el rendimiento de las consultas. SQL Server proporciona comandos para reorganizar y reconstruir índices FULLTEXT.

Reorganizar y Recrear Índices FULLTEXT

Para reorganizar y reconstruir índices FULLTEXT, utiliza las siguientes consultas:

Reorganizar el Catálogo

La reorganización de un catálogo FULLTEXT compacta el índice y mejora su rendimiento.

ALTER FULLTEXT CATALOG [catalog_name] REORGANIZE;
GO
  • [catalog_name]: Nombre del catálogo FULLTEXT.

Reconstruir el Catálogo

La reconstrucción de un catálogo FULLTEXT recrea completamente el índice, eliminando la fragmentación.

ALTER FULLTEXT CATALOG [catalog_name] REBUILD;
GO
  • [catalog_name]: Nombre del catálogo FULLTEXT.

Ejemplo de Reorganización y Recreación

Para identificar los fragmentos en los índices FULLTEXT, puedes ejecutar la siguiente consulta:

SELECT t.name, f.* 
FROM sys.fulltext_index_fragments f, sys.tables t
WHERE t.object_id = f.table_id;
GO

Luego, para reorganizar y reconstruir el catálogo t1_texto, ejecuta:

ALTER FULLTEXT CATALOG [t1_texto] REORGANIZE;
GO

ALTER FULLTEXT CATALOG [t1_texto] REBUILD;
GO

Comprobación de la Fragmentación en Índices FULLTEXT en SQL Server

La fragmentación en los índices FULLTEXT puede afectar significativamente el rendimiento de las consultas. Por eso, es importante monitorear y gestionar la fragmentación de estos índices. A continuación, presentamos una consulta detallada para comprobar la fragmentación de todos los índices FULLTEXT en una base de datos.

Consulta para Comprobar la Fragmentación FULLTEXT

La siguiente consulta recupera información sobre la fragmentación de todos los índices FULLTEXT en la base de datos, incluyendo el ID del catálogo, el nombre del catálogo, el estado de seguimiento de cambios, el ID del objeto, el nombre del objeto, el número de fragmentos, el tamaño total del índice en MB, el tamaño del fragmento más grande en MB y el porcentaje de fragmentación.

SELECT 
c.fulltext_catalog_id,
c.name AS fulltext_catalog_name,
i.change_tracking_state,
i.object_id,
OBJECT_SCHEMA_NAME(i.object_id) + '.' + OBJECT_NAME(i.object_id) AS object_name,
f.num_fragments,
f.fulltext_mb,
f.largest_fragment_mb,
100.0 * (f.fulltext_mb - f.largest_fragment_mb) / NULLIF(f.fulltext_mb, 0) AS fulltext_fragmentation_in_percent
--INTO #fulltextFragmentationDetails
FROM
sys.fulltext_catalogs c
JOIN
sys.fulltext_indexes i ON i.fulltext_catalog_id = c.fulltext_catalog_id
JOIN (
-- Computa los datos de fragmentación para cada tabla con un índice FULLTEXT
SELECT
table_id,
COUNT(*) AS num_fragments,
CONVERT(DECIMAL(9,2), SUM(data_size / (1024.0 * 1024.0))) AS fulltext_mb,
CONVERT(DECIMAL(9,2), MAX(data_size / (1024.0 * 1024.0))) AS largest_fragment_mb
FROM
sys.fulltext_index_fragments
GROUP BY
table_id
) f ON f.table_id = i.object_id;

Explicación de la Consulta

  1. sys.fulltext_catalogs: Esta tabla del sistema contiene información sobre los catálogos FULLTEXT en la base de datos.
  2. sys.fulltext_indexes: Esta tabla del sistema contiene información sobre los índices FULLTEXT en la base de datos.
  3. sys.fulltext_index_fragments: Esta tabla del sistema contiene información sobre los fragmentos de los índices FULLTEXT.

La consulta realiza los siguientes pasos:

  • Selecciona el ID del catálogo, el nombre del catálogo y el estado de seguimiento de cambios desde sys.fulltext_catalogs y sys.fulltext_indexes.
  • Realiza una unión con una subconsulta que calcula el número de fragmentos, el tamaño total del índice en MB y el tamaño del fragmento más grande en MB para cada tabla con un índice.
  • Calcula el porcentaje de fragmentación utilizando la fórmula: 100.0 * (f.fulltext_mb - f.largest_fragment_mb) / NULLIF(f.fulltext_mb, 0). Esta fórmula determina qué tan fragmentado está el índice al comparar el tamaño total del índice con el tamaño del fragmento más grande.

Uso de la Información

La información obtenida de esta consulta puede ayudarte a identificar los índices FULLTEXT que necesitan ser reorganizados o reconstruidos.

  • Número de Fragmentos (num_fragments): Un alto número de fragmentos puede indicar que el índice está fragmentado y necesita mantenimiento.
  • Tamaño Total del Índice (fulltext_mb): Indica el tamaño total del índice en megabytes.
  • Tamaño del Fragmento Más Grande (largest_fragment_mb): Indica el tamaño del fragmento más grande en el índice.
  • Porcentaje de Fragmentación (fulltext_fragmentation_in_percent): Un alto porcentaje de fragmentación indica que el índice está desfragmentado y puede beneficiarse de una reorganización o reconstrucción.

Ejemplo de Mantenimiento de Índices, Fragmentación FULLTEXT

Basado en la información de fragmentación, puedes decidir reorganizar o reconstruir los catálogos FULLTEXT. A continuación se muestran ejemplos de cómo realizar estas operaciones:

Reorganizar un Catálogo

ALTER FULLTEXT CATALOG [nombre_del_catalogo] REORGANIZE;
GO

Reconstruir un Catálogo

ALTER FULLTEXT CATALOG [nombre_del_catalogo] REBUILD;
GO

Estos comandos ayudan a mantener los índices FULLTEXT optimizados, mejorando el rendimiento de las consultas de texto completo.

Conclusión

FULLTEXT es una herramienta poderosa para mejorar la búsqueda y gestión de grandes volúmenes de datos textuales en SQL. Al seguir estos pasos y ejemplos, puedes crear, gestionar y mantener eficientemente tus catálogos e índices. Mantén tus índices optimizados y actualizados para garantizar un rendimiento óptimo y resultados de búsqueda precisos.

Monitorear y gestionar la fragmentación de los índices es crucial para mantener el rendimiento óptimo de tus consultas SQL. Utiliza la consulta proporcionada para obtener una visión detallada de la fragmentación y aplica las acciones necesarias para reorganizar o reconstruir los índices según sea necesario.

Procedimientos Almacenados Temporales en SQL Server

Generando Script de creación de Usuarios en SQL Server

Descarga de SQL Server Management Studio (SSMS)

Sacar permisos de Base de Datos SQL scripts

Convertir una Fecha y Hora a Solo Fecha en SQL

¿Qué son las vistas SQL Server? Una Guía Completa

fulltext en sql

Para que una tabla tenga FULLTEXT SQL

FULLTEXT es necesario que tenga un PRIMARY KEY, clustered o non-clustered, el manejo eficiente de datos textuales es esencial en el desarrollo de aplicaciones modernas. A menudo, necesitamos buscar palabras clave específicas dentro de grandes volúmenes de texto almacenados en nuestras bases de datos. Aquí es donde entra en juego FULLTEXT, una característica poderosa de SQL que puede mejorar significativamente el rendimiento de tus consultas de texto.

¿Qué es FULLTEXT en SQL?

FULLTEXT es una característica de las bases de datos SQL que permite realizar búsquedas de texto completo en columnas que contienen datos textuales. A diferencia de las búsquedas tradicionales basadas en índices, FULLTEXT está optimizado para trabajar con grandes cantidades de texto, proporcionando resultados rápidos y precisos.

Ventajas de usar FULLTEXT

  1. Rendimiento Mejorado: Las búsquedas de texto completo son mucho más rápidas y eficientes que las búsquedas tradicionales, especialmente en grandes volúmenes de datos.
  2. Búsquedas Relevantes: puede clasificar los resultados en función de su relevancia, lo que facilita encontrar la información más importante.
  3. Flexibilidad: Permite realizar búsquedas complejas, como buscar frases exactas, palabras parciales, y combinaciones de términos.

Implementando FULLTEXT en SQL

Para ilustrar cómo implementar y utilizar FULLTEXT en SQL, veremos un ejemplo práctico. Supongamos que tienes una tabla llamada articulos que almacena artículos de un blog.

Paso 1: Crear la Tabla

Primero, creamos la tabla con las columnas necesarias. Incluimos una columna para el título del artículo y otra para el contenido.

CREATE TABLE articulos (
id INT AUTO_INCREMENT PRIMARY KEY,
titulo VARCHAR(255),
contenido TEXT
);

Paso 2: Añadir el Índice

El siguiente paso es añadir un índice a las columnas que queremos buscar. En este caso, añadiremos el índice a las columnas titulo y contenido.

ALTER TABLE articulos
ADD FULLTEXT(titulo, contenido);

Paso 3: Insertar Datos

Para probar nuestras búsquedas , insertamos algunos artículos en la tabla.

INSERT INTO articulos (titulo, contenido)
VALUES
('Introducción a SQL', 'SQL es un lenguaje estándar para gestionar bases de datos.'),
('FULLTEXT en SQL', 'FULLTEXT es una característica poderosa que permite búsquedas de texto completo.'),
('Optimizando Consultas', 'Aprende a optimizar tus consultas SQL para mejorar el rendimiento.');

Paso 4: Realizar Búsquedas FULLTEXT

Ahora que tenemos datos y un índice, podemos realizar búsquedas eficientes. Utilizamos la cláusula MATCH y AGAINST para buscar términos específicos.

SELECT * FROM articulos
WHERE MATCH(titulo, contenido) AGAINST('SQL');

Esta consulta buscará todos los artículos que contienen la palabra «SQL» en el título o el contenido.

Búsquedas Avanzadas

Ofrece varias opciones avanzadas para personalizar tus búsquedas.

Búsqueda de Frases Exactas

Si necesitas buscar una frase exacta, utiliza comillas dobles.

SELECT * FROM articulos
WHERE MATCH(titulo, contenido) AGAINST('"búsquedas de texto completo"' IN BOOLEAN MODE);

Búsquedas Booleanas

Las búsquedas booleanas permiten combinar términos con operadores como + y - para incluir o excluir palabras.

SELECT * FROM articulos
WHERE MATCH(titulo, contenido) AGAINST('+SQL -optimización' IN BOOLEAN MODE);

Esta consulta busca artículos que contienen «SQL» pero no «optimización».

Optimización y Buenas Prácticas

Para sacar el máximo provecho de FULLTEXT, considera las siguientes prácticas recomendadas.

Actualización del Índice

Cada vez que se inserta, actualiza o elimina un registro, el índice debe actualizarse. Mantén tus índices actualizados para asegurar un rendimiento óptimo.

OPTIMIZE TABLE articulos;

Evitar Stopwords

Las bases de datos SQL tienen una lista de palabras comunes (stopwords) que no se indexan. Personaliza esta lista según tus necesidades.

SET GLOBAL ft_stopword_file='';

Ajuste de la Relevancia

La relevancia de los resultados puede ajustarse modificando los parámetros del índice FULLTEXT.

SET GLOBAL ft_min_word_len = 3;

Este comando ajusta la longitud mínima de las palabras indexadas a 3 caracteres.

Conclusión

FULLTEXT es una herramienta esencial para cualquier desarrollador que trabaje con grandes volúmenes de datos textuales. Al implementar y optimizar búsquedas de texto completo, puedes mejorar significativamente el rendimiento y la relevancia de tus consultas. Sigue las prácticas recomendadas y ajusta las configuraciones según tus necesidades específicas para obtener los mejores resultados. ¡Empieza hoy a aprovechar el poder de FULLTEXT en SQL y lleva tus aplicaciones al siguiente nivel!

Entendiendo Kerberos en SQL Server: Seguridad y Autenticación

Error 15025 SQL Server. The server principal already exists

dm_exec_requests en SQL Server

Top de Tablas del Sistema SQL Server más importantes

NTLM en SQL Server: Una Guía Completa

Identificar Objetos No Utilizados en su Base de Datos SQL Server

Identificar Objetos No Utilizados en su Base de Datos SQL Server

La gestión eficiente de una base de datos SQL Server incluye la identificación y eliminación de objetos no utilizados. Estos objetos pueden ser tablas, vistas, procedimientos almacenados, funciones, índices, entre otros. Mantener una base de datos limpia y eficiente no solo mejora el rendimiento, sino que también reduce el riesgo de errores y facilita el mantenimiento. A continuación, exploraremos diversas técnicas para identificar estos objetos no utilizados en SQL Server.

Métodos para Identificar Objetos No Utilizados

1. Uso de SQL Server Profiler

SQL Server Profiler es una herramienta poderosa para capturar y analizar eventos en SQL Server. Se puede utilizar para monitorear la actividad de la base de datos y determinar qué objetos están siendo utilizados.

Pasos para usar SQL Server Profiler:

  1. Configuración del Profiler:
    • Abre SQL Server Profiler y crea una nueva traza.
    • Configura los eventos que deseas capturar, como RPC, SQL, y SP, que rastrean la ejecución de procedimientos almacenados, lotes SQL y procedimientos de almacenamiento.
  2. Ejecución de la traza:
    • Ejecuta la traza durante un período de tiempo representativo, asegurándote de que todas las funcionalidades de la aplicación que se conecta a la base de datos se utilicen.
  3. Análisis de los resultados:
    • Analiza los resultados capturados para identificar qué objetos han sido utilizados y cuáles no. Si un objeto no aparece en los resultados, es posible que no esté en uso.

2. Método de Cambio de Nombre y Observación

Otra técnica consiste en cambiar el nombre de los objetos que se sospecha no están en uso y observar si esto provoca errores en la aplicación.

Pasos para implementar este método:

  1. Identificación y renombramiento:
    • Cambia el nombre de un objeto, como un procedimiento almacenado o una tabla, añadiendo un prefijo o sufijo (por ejemplo, _old).
  2. Monitoreo de errores:
    • Observa la base de datos y la aplicación durante un período de tiempo para ver si el cambio de nombre provoca errores o fallos.
  3. Restauración o eliminación:
    • Si no se producen errores después de un tiempo razonable, es probable que el objeto no se esté utilizando. Puedes proceder a eliminarlo o archivarlo.

3. Uso de Consultas SQL para Monitoreo

Una alternativa más técnica es usar consultas SQL para monitorear el uso de los objetos a través de las vistas dinámicas de gestión (DMVs).

Ejemplo de consulta SQL:

SELECT source_code, last_execution_time
FROM sys.dm_exec_query_stats as stats
CROSS APPLY (
SELECT text as source_code
FROM sys.dm_exec_sql_text(sql_handle)
) AS query_text
ORDER BY last_execution_time DESC;


Explicación de la consulta:

  • Esta consulta obtiene el código fuente de las consultas ejecutadas y la última vez que se ejecutaron.
  • Analiza los resultados para ver qué objetos han sido utilizados recientemente.
  • Al monitorear los resultados durante un período, puedes identificar objetos que no se utilizan, ya que no aparecerán en los resultados.

Otros Scripts Útiles para Identificar Objetos No Utilizados

1. Identificar Tablas No Utilizadas

SELECT t.name AS table_name,
ius.user_seeks,
ius.user_scans,
ius.user_lookups,
ius.user_updates
FROM sys.tables AS t
LEFT JOIN sys.dm_db_index_usage_stats AS ius
ON t.[object_id] = ius.[object_id]
WHERE ius.[object_id] IS NULL
OR (ius.user_seeks = 0
AND ius.user_scans = 0
AND ius.user_lookups = 0
AND ius.user_updates = 0);

Explicación:

  • Esta consulta busca tablas que no tienen actividad registrada en la vista sys.dm_db_index_usage_stats, lo que indica que no han sido leídas o modificadas.

2. Identificar Procedimientos Almacenados No Utilizados

SELECT p.name AS proc_name,
ps.last_execution_time
FROM sys.procedures AS p
LEFT JOIN sys.dm_exec_procedure_stats AS ps
ON p.[object_id] = ps.[object_id]
WHERE ps.[object_id] IS NULL
OR ps.last_execution_time IS NULL;

Explicación:

  • Esta consulta lista los procedimientos almacenados que no tienen un registro de ejecución reciente en sys.dm_exec_procedure_stats.

3. Identificar Vistas No Utilizadas

SELECT v.name AS view_name,
SUM(ius.user_seeks + ius.user_scans + ius.user_lookups + ius.user_updates) AS total_usage
FROM sys.views AS v
LEFT JOIN sys.dm_db_index_usage_stats AS ius
ON v.[object_id] = ius.[object_id]
GROUP BY v.name
HAVING SUM(ius.user_seeks + ius.user_scans + ius.user_lookups + ius.user_updates) = 0;

Explicación:

  • Esta consulta identifica vistas que no han sido utilizadas para búsquedas, escaneos, consultas o actualizaciones.

Ejemplos Prácticos

Ejemplo 1: Uso del SQL Server Profiler

Imagina que tienes una base de datos para una aplicación de gestión de inventarios. Quieres saber si un procedimiento almacenado llamado sp_UpdateInventory todavía se utiliza.

  1. Configura el Profiler para capturar la ejecución de sp_UpdateInventory.
  2. Ejecuta la aplicación y utiliza todas las funcionalidades relacionadas con el inventario.
  3. Analiza los resultados: Si sp_UpdateInventory no aparece en la traza, es posible que ya no se esté utilizando.

Ejemplo 2: Método de Cambio de Nombre

Tienes una tabla llamada TemporaryData que sospechas que ya no se usa.

  1. Renombra la tabla a TemporaryData_old.
  2. Monitorea la aplicación durante un mes.
  3. Observa los errores: Si no hay errores relacionados con TemporaryData, puedes eliminarla de manera segura.

Ejemplo 3: Consulta SQL

Quieres saber si la función fn_CalculateDiscount se está utilizando.

  1. Ejecuta la consulta SQL proporcionada anteriormente.
  2. Revisa los resultados para buscar fn_CalculateDiscount.
  3. Si no aparece en los resultados después de un período de monitoreo, probablemente no se esté utilizando.

Conclusión

Identificar y eliminar objetos no utilizados en SQL Server es esencial para mantener una base de datos eficiente y libre de desorden. Ya sea que utilices SQL Server Profiler, métodos de cambio de nombre o consultas SQL, cada técnica tiene sus ventajas y puede ser adecuada dependiendo del contexto y los recursos disponibles.

Error 15025 SQL Server. The server principal already exists

Comando Read Linux: Cómo Hacer Peticiones al Usuario en Scripting

UPDATE JOIN en SQL para Actualizar Tablas Relacionadas

Operador NOT IN de SQL: Una Guía Completa

¿Qué es el Transaction Log? La Importancia en SQL Server

Comando Read Linux

Comando Read Linux: Cómo Hacer Peticiones al Usuario en Scripting

Comando Read Linux, una herramienta esencial para facilitar tareas de scripting en Linux. Este comando permite interactuar con el usuario, solicitando la introducción de datos, como contraseñas o valores de parámetros. A continuación, veremos varios ejemplos prácticos del comando read, esperando que os resulten útiles.

Introducción al Comando Read en Bash

El comando read es fundamental en Bash para obtener entradas del usuario. Es común en scripts que requieren la intervención del usuario, por ejemplo, para introducir una contraseña o el valor de un parámetro. Para comenzar a usar el comando read, necesitamos crear un archivo .sh utilizando un editor de texto como vi, nano, o gedit.

Primero, creamos un archivo vacío llamado read.sh. Después, le damos permisos de ejecución con el siguiente comando:

chmod +x read.sh

Una vez creado el archivo y otorgados los permisos necesarios, podemos probar los siguientes ejemplos.

Ejemplo Básico del Comando Read

En este ejemplo básico, simplemente introducimos el comando read junto con una variable, y luego mostramos el valor introducido por pantalla.

#!/bin/bash
echo Introduce tu usuario
read usuario
echo Bienvenido, $usuario

Este código puede optimizarse combinando la pregunta y la asignación de la variable en la misma línea usando el parámetro -p de read.

#!/bin/bash
read -p "Introduce tu usuario: " usuario
echo Bienvenido, $usuario

Solicitud de Contraseñas

Si probáis los ejemplos anteriores, notaréis que el valor introducido es visible. Para solicitar una contraseña, donde necesitamos ocultar los caracteres introducidos, usamos el parámetro -s.

En este ejemplo, pediremos el usuario y la contraseña, mostrando ambos valores posteriormente en pantalla solo para comprobar que funciona. En un entorno de producción, usaríamos esa contraseña para realizar otra acción sin mostrarla.

#!/bin/bash
read -p "Usuario: " usuario
read -sp "Bienvenido, $usuario, introduce tu contraseña: " password
echo -e "\nEl usuario es $usuario y la contraseña es $password

En el ejemplo anterior, combinamos los parámetros -p para introducir un mensaje y -s para ocultar la contraseña. Usamos echo -e para insertar una nueva línea (\n) en la salida.

Petición de Múltiples Valores

Podemos solicitar múltiples valores al usuario en una sola línea utilizando el comando read. Esto es útil cuando necesitamos varios parámetros en una única entrada.

#!/bin/bash
read -p "Introduce tu nombre, edad y ciudad: " nombre edad ciudad
echo "Nombre: $nombre, Edad: $edad, Ciudad: $ciudad"

En este ejemplo, el usuario introduce tres valores separados por espacios, que luego son asignados a las variables nombre, edad, y ciudad.

Uso de Delimitadores Personalizados

El comando read también permite usar delimitadores personalizados para separar los valores introducidos. El siguiente ejemplo utiliza dos puntos (:) como delimitador.

#!/bin/bash
IFS=":" read -p "Introduce tu nombre:edad:ciudad: " nombre edad ciudad
echo "Nombre: $nombre, Edad: $edad, Ciudad: $ciudad"

El parámetro IFS (Internal Field Separator) se usa para definir el delimitador, en este caso, el símbolo dos puntos (:).

Tiempo de Espera y Valores Predeterminados

Podemos establecer un tiempo de espera para la entrada del usuario y un valor predeterminado en caso de que no se introduzca nada dentro del tiempo especificado.

#!/bin/bash
read -t 5 -p "Introduce tu nombre (tienes 5 segundos): " nombre
nombre=${nombre:-"Invitado"}
echo "Hola, $nombre"

En este ejemplo, el script espera 5 segundos para que el usuario introduzca su nombre. Si no se introduce ningún valor, nombre se establece como «Invitado».

Confirmación de Entradas

A veces, es útil pedir al usuario que confirme su entrada. Esto puede lograrse fácilmente con read y un simple bucle.

#!/bin/bash
while true; do
read -p "Introduce tu usuario: " usuario
read -sp "Introduce tu contraseña: " password
echo -e "\nUsuario: $usuario, Contraseña: $password"
read -p "¿Son correctos estos datos? (s/n): " confirmacion
case $confirmacion in
[Ss]* ) break;;
[Nn]* ) echo "Por favor, inténtalo de nuevo.";;
* ) echo "Por favor, responde s (sí) o n (no).";;
esac
done
echo "Datos confirmados. Continuando..."

Este script pide al usuario que confirme su nombre de usuario y contraseña. Si el usuario responde con «s» o «S», el bucle se rompe y el script continúa. Si responde «n» o «N», se le pide que vuelva a introducir los datos.

Conclusión

El comando read en Bash es una herramienta poderosa y versátil para interactuar con el usuario en scripts de Linux. Hemos visto cómo utilizarlo en ejemplos básicos, pedir contraseñas, solicitar múltiples valores, usar delimitadores personalizados, establecer tiempos de espera y valores predeterminados, y confirmar entradas. Con estos conocimientos, podéis mejorar la interactividad y funcionalidad de vuestros scripts en Linux.

SSPI handshake failed with error code 0x8009030c SQL Server

Error 15025 SQL Server. The server principal already exists

Auditoría descubriendo las Conexiones en SQL Server

Entendiendo Kerberos en SQL Server: Seguridad y Autenticación

Insertar Varias Filas en SQL Server: Simplifica tu Trabajo

Error 15025 SQL Server. The server principal already exists

Error 15025 SQL Server. The server principal already exists

Error 15025 SQL Server, en el mundo de la administración de bases de datos, es común enfrentarse a problemas relacionados con la creación y gestión de logins en SQL Server. Estos inconvenientes pueden surgir debido a varios factores, como cambios en la estructura organizativa o migraciones de sistemas. En este blog, exploraremos cómo identificar y resolver problemas de login en SQL Server, específicamente aquellos relacionados con el identificador único SID (Security Identifier).

Error 15025 SQL Server. The server principal already exists
Error 15025 SQL Server. The server principal already exists

Identificando Logins Existentes

Antes de proceder con la resolución de cualquier problema, es fundamental verificar si el login en cuestión ya existe en el sistema. Dependiendo de la versión de SQL Server que estés utilizando, puedes utilizar una de las siguientes consultas:

Para SQL Server 2016 y superiores:

SELECT * FROM master.sys.sql_logins WHERE name='login_a_buscar';

Para SQL Server 2019:

SELECT * FROM master.sys.syslogins WHERE name='login_a_buscar';

Si la consulta confirma la existencia del login, no es necesario realizar ninguna acción adicional. Sin embargo, si el login no está creado, es crucial determinar si el problema está relacionado con el SID.

El Rol del SID en SQL Server

El SID es un identificador único asignado a cada login en SQL Server. Este identificador es esencial para la autenticación y autorización del usuario. Supongamos que un usuario de dominio de Windows cambió su nombre de «dominio\aperez» a «dominio\E2572» debido a una reorganización empresarial. Aunque el nombre del usuario ha cambiado, el SID permanece igual. Esta situación puede causar conflictos al intentar crear un nuevo login en SQL Server.

Identificando el SID del Login Antiguo

Para resolver el problema, primero necesitamos conocer el SID del login antiguo. Puedes obtenerlo con la siguiente consulta:

sqlCopiar códigoSELECT SUSER_SID('dominio\omoran');

La consulta devolverá un SID similar a:

0x010500000000000515000000335089052D4CEC75E0276300F0190100

Verificando el Login Asociado al SID

Con el SID en mano, podemos verificar que está asociado al login antiguo y obtener todos sus datos:

SELECT * FROM sys.server_principals sp WHERE sid=0x010500000000000515000000335089052D4CEC75E0276300F0190100

Reemplazando el Login Antiguo con el Nuevo

Una vez localizado el login, el siguiente paso es utilizar SQL Server Management Studio para eliminar el login antiguo y crear uno nuevo con el mismo SID pero con el nuevo nombre de usuario. A continuación, se detalla el proceso paso a paso:

  1. Generar el Código SQL:
    • En SQL Server Management Studio, localiza el login antiguo.
    • Haz clic derecho sobre él y selecciona «Incluir inicio de sesión como -> DROP and CREATE to -> Nueva ventana del editor de consultas».
    • Esta acción generará el código necesario para eliminar y volver a crear el login.
  2. Modificar el Código SQL:
    • En la nueva ventana de consultas, reemplaza el nombre del login antiguo por el nuevo en la instrucción CREATE LOGIN.

Ejemplo de código modificado:

USE [master]
GO
DROP LOGIN [dominio\omoran]
GO
CREATE LOGIN [dominio\nuevo_omoran] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [dominio\nuevo_omoran]
GO
  1. Ejecutar el Código:
    • Ejecuta el código modificado para eliminar el login antiguo y crear el nuevo login con las mismas características.

Verificación Final

Para asegurarnos de que todo ha funcionado correctamente, podemos repetir la consulta inicial para verificar la existencia del login con el nuevo nombre pero el mismo SID:

SELECT * FROM sys.server_principals sp WHERE sid=0x010500000000000515000000335089052D4CEC75E0276300F0190100

Si la consulta devuelve el nuevo login, habrás resuelto exitosamente el problema.

Conclusión

Gestionar logins en SQL Server puede ser desafiante, especialmente cuando se trata de conflictos relacionados con el SID. Sin embargo, con las consultas y pasos adecuados, es posible solucionar estos problemas de manera efectiva. Esperamos que esta guía te haya proporcionado las herramientas necesarias para enfrentar y resolver conflictos de login en tu entorno de SQL Server.

Script para saber el histórico de queries ejecutados SQL

¿Qué es un SGBDR SQL Server? Todo lo que Necesitas Saber

Eliminar usuarios huérfanos SQL server

Operador NOT IN de SQL: Una Guía Completa

Sacar permisos de Base de Datos SQL scripts

Entendiendo Kerberos en SQL Server: Seguridad y Autenticación

Guía Completa para Formatear Fechas en SQL FORMAT Server 2022

Descarga de SQL Server Management Studio (SSMS)

que es una vista sql

¿Qué son las vistas SQL Server? Una Guía Completa

Introducción a las Vistas en SQL Server

Las bases de datos son el núcleo de muchas aplicaciones y sistemas, y en este ámbito, SQL Server se destaca como una de las herramientas más robustas y versátiles. Entre las diversas funcionalidades que ofrece, las vistas (views) juegan un papel crucial. Si te has preguntado alguna vez qué es una vista en SQL Server y cómo puede beneficiarte, estás en el lugar correcto. En esta guía, exploraremos en detalle qué son las vistas, cómo se crean, sus ventajas y algunos ejemplos prácticos para ilustrar su uso.

¿Qué es una Vista en SQL Server?

Una vista en SQL Server es un objeto de base de datos que presenta datos de una o más tablas de manera estructurada. Piensa en una vista como una ventana a través de la cual puedes ver y consultar datos específicos sin necesidad de acceder directamente a las tablas subyacentes. Las vistas son esencialmente consultas predefinidas que se almacenan en la base de datos y pueden ser reutilizadas tantas veces como sea necesario.

Beneficios de Utilizar Vistas

Las vistas ofrecen varios beneficios importantes:

  1. Simplicidad y Reutilización: Una vez creada, una vista puede ser utilizada en múltiples consultas, lo que simplifica la gestión de consultas complejas.
  2. Seguridad: Las vistas pueden limitar el acceso a datos sensibles, permitiendo que los usuarios vean sólo la información relevante sin otorgarles acceso directo a las tablas subyacentes.
  3. Mantenimiento: Cambios en la estructura de la base de datos pueden ser manejados de manera más eficiente, ya que las vistas actúan como una capa intermedia.
  4. Rendimiento: En algunos casos, las vistas pueden mejorar el rendimiento al simplificar las consultas y permitir que el servidor de base de datos optimice el acceso a los datos.

Cómo Crear una Vista en SQL Server

Crear una vista en SQL Server es un proceso relativamente sencillo. A continuación, se presenta la sintaxis básica para la creación de una vista:

CREATE VIEW NombreDeLaVista AS
SELECT Columna1, Columna2, ...
FROM Tabla
WHERE Condiciones;

Ejemplo de Creación de una Vista

Supongamos que tenemos una base de datos con una tabla llamada Clientes que contiene información sobre los clientes de una empresa. Queremos crear una vista que muestre sólo los clientes activos. La consulta para crear esta vista sería:

CREATE VIEW VistaClientesActivos AS
SELECT Nombre, Apellido, Email
FROM Clientes
WHERE Estado = 'Activo';

En este ejemplo, hemos creado una vista llamada VistaClientesActivos que selecciona los nombres, apellidos y correos electrónicos de los clientes cuyo estado es ‘Activo’. Esta vista puede ser consultada como cualquier otra tabla:

sqlCopiar códigoSELECT * FROM VistaClientesActivos;

Tipos de Vistas en SQL Server

Existen diferentes tipos de vistas en SQL Server, cada una con características y usos específicos.

Vistas Simples

Las vistas simples se basan en una única tabla y no incluyen funciones agregadas ni uniones complejas. Son fáciles de crear y mantener.

Vistas Complejas

Las vistas complejas pueden involucrar múltiples tablas, uniones (joins), funciones agregadas y subconsultas. Estas vistas son útiles para representar relaciones más complejas y proporcionar información agregada.

Vistas Indexadas

Las vistas indexadas son vistas que tienen un índice asociado. Estos índices pueden mejorar significativamente el rendimiento de las consultas que utilizan la vista, especialmente en bases de datos grandes.

Vistas Particionadas

Las vistas particionadas permiten dividir datos grandes en partes más manejables. Esto puede ser útil para mejorar el rendimiento y la administración de grandes volúmenes de datos.

Usos Comunes de las Vistas

Las vistas se utilizan en una amplia variedad de situaciones. Aquí algunos ejemplos comunes:

Reportes y Análisis

Las vistas son excelentes para generar reportes y análisis. Al consolidar datos de múltiples tablas, las vistas pueden proporcionar una visión integral sin la necesidad de consultas complejas cada vez.

Ejemplo

CREATE VIEW VentasPorRegion AS
SELECT Region, SUM(Ventas) AS TotalVentas
FROM Ventas
GROUP BY Region;

En este ejemplo, la vista VentasPorRegion agrupa las ventas por región y calcula el total de ventas por cada una.

Seguridad de Datos

Las vistas pueden restringir el acceso a datos sensibles. Por ejemplo, una vista puede mostrar sólo ciertas columnas de una tabla, ocultando información confidencial.

Ejemplo

CREATE VIEW EmpleadosPublicos AS
SELECT Nombre, Apellido, Departamento
FROM Empleados
WHERE Privacidad = 'Publico';

Aquí, la vista EmpleadosPublicos muestra información de empleados que han consentido que sus datos sean públicos.

Simplificación de Consultas Complejas

Las vistas pueden simplificar consultas complejas al encapsular la lógica en una estructura reutilizable.

Ejemplo

CREATE VIEW ClientesConPedidos AS
SELECT C.Nombre, C.Apellido, P.FechaPedido, P.Total
FROM Clientes C
JOIN Pedidos P ON C.ClienteID = P.ClienteID;

Esta vista ClientesConPedidos combina información de clientes y sus pedidos, simplificando futuras consultas.

Consideraciones y Buenas Prácticas

Al trabajar con vistas, es importante tener en cuenta algunas buenas prácticas:

  1. Mantén la Simplicidad: Aunque las vistas pueden ser complejas, es recomendable mantenerlas lo más simples posible para facilitar el mantenimiento y la comprensión.
  2. Documenta las Vistas: Siempre documenta las vistas, incluyendo su propósito y las tablas y columnas que involucra.
  3. Monitorea el Rendimiento: Asegúrate de monitorear el rendimiento de las vistas, especialmente si son utilizadas en entornos de producción con grandes volúmenes de datos.
  4. Considera las Vistas Indexadas: Para consultas que se ejecutan con frecuencia, considera la creación de vistas indexadas para mejorar el rendimiento.

Conclusión

Las vistas en SQL Server son una herramienta poderosa que puede simplificar la gestión de datos, mejorar la seguridad y optimizar el rendimiento de las consultas. Al comprender cómo crear y utilizar vistas, puedes aprovechar al máximo las capacidades de SQL Server y mejorar la eficiencia de tus aplicaciones y sistemas.

Script Creación de Roles en SQL Server

dm_exec_procedure_stats en SQL Server

Auditoría descubriendo las Conexiones en SQL Server

Script para saber el histórico de queries ejecutados SQL

Descarga de SQL Server Management Studio (SSMS)

Extracción de las Vistas en SQL Server

Extracción de las Vistas en SQL Server

Extracción de Vistas en SQL Server, la administración de bases de datos no es solo cuestión de almacenar y recuperar datos de manera eficiente. También es fundamental garantizar que la información esté protegida y que solo las personas autorizadas puedan acceder a ella. Una de las formas más efectivas de controlar el acceso es a través de la gestión de vistas y el uso de comandos GRANT en SQL Server. En este artículo, exploraremos cómo extraer vistas y conceder permisos de manera segura y eficiente.

¿Qué es una Vista en SQL Server?

Una vista es una consulta almacenada que proporciona una manera de ver y trabajar con los datos sin necesidad de interactuar directamente con las tablas subyacentes. Las vistas pueden simplificar las consultas complejas, proteger la información sensible y facilitar la administración de permisos.

Ejemplo de una Vista

Imaginemos que tenemos una tabla llamada empleados con las columnas nombre, salario y departamento. Podemos crear una vista para ver solo los nombres y departamentos de los empleados:

CREATE VIEW vista_empleados
AS
SELECT nombre, departamento
FROM empleados;

Extracción de las Vistas en SQL Server

A medida que nuestra base de datos crece, puede ser necesario listar todas las vistas creadas a partir de una fecha específica. Esto es útil para auditar cambios recientes o para asegurarse de que todas las vistas tengan los permisos adecuados.

Consulta para Extraer Vistas

El siguiente script permite extraer todas las vistas creadas después del 20 de septiembre de 2021, que no son vistas internas de Microsoft, y ordenarlas por fecha de creación de manera descendente:

SELECT *, 'GRANT VIEW DEFINITION ON [' + s.name + '].[' + o.name + '] TO [db_view]'
FROM sys.objects o
JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE type = 'V' -- objeto vista
AND create_date > '2021-09-20' -- fecha aproximada a partir de cuando se crean las nuevas vistas
AND is_ms_shipped = 0 -- que NO son vistas internas de Microsoft
ORDER BY create_date DESC;

Este script no solo extrae la información de las vistas, sino que también genera el comando GRANT correspondiente para otorgar permisos de definición de vista.

Extracción de las Vistas en SQL Server

Otorgar Permisos con el Comando GRANT

En SQL Server, los permisos se gestionan mediante el uso del comando GRANT. Este comando permite conceder varios tipos de permisos, como SELECT, INSERT, UPDATE, DELETE, y más. En el contexto de las vistas, uno de los permisos más relevantes es VIEW DEFINITION.

¿Qué es VIEW DEFINITION?

El permiso VIEW DEFINITION permite a un usuario ver la definición de una vista, es decir, ver el código SQL que la compone. Esto es particularmente útil para desarrolladores y administradores que necesitan entender la estructura de las vistas sin modificar los datos subyacentes.

Ejemplo de Comando GRANT

Supongamos que queremos otorgar permisos de definición de vista a un usuario llamado db_view para la vista vista_empleados. El comando sería:

GRANT VIEW DEFINITION ON dbo.vista_empleados TO db_view;

Este comando es sencillo, pero cuando se tiene una base de datos con muchas vistas, automatizar la generación de estos comandos puede ahorrar mucho tiempo y reducir errores.

Automatización de la Gestión de Permisos

El script proporcionado al inicio genera automáticamente los comandos GRANT para cada vista que cumple con los criterios especificados. Esto facilita enormemente la gestión de permisos, especialmente en entornos de desarrollo y pruebas donde las vistas pueden cambiar con frecuencia.

Ejemplo Completo

A continuación, se muestra un ejemplo completo que combina la extracción de vistas y la generación de comandos GRANT:

SELECT *, 'GRANT VIEW DEFINITION ON [' + s.name + '].[' + o.name + '] TO [db_view]'
FROM sys.objects o
JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE type = 'V'
AND create_date > '2021-09-20'
AND is_ms_shipped = 0
ORDER BY create_date DESC;

Este script proporciona una lista de todas las vistas junto con los comandos necesarios para otorgar permisos. Solo necesita copiar y ejecutar los comandos generados.

object_idnameschema_idparent_object_idtypetype_desccreate_datemodify_dateis_ms_shippedis_publishedis_schema_publishedschema_idschema_nameGRANT_VIEW_COMMAND
545673010vista_ventas10VVIEW2022-03-15 10:30:452022-03-15 10:30:450001dboGRANT VIEW DEFINITION ON [dbo].[vista_ventas] TO [db_view]
678945321vista_clientes10VVIEW2022-01-10 14:20:222022-01-10 14:20:220001dboGRANT VIEW DEFINITION ON [dbo].[vista_clientes] TO [db_view]
784512369vista_productos10VVIEW2021-11-05 09:15:332021-11-05 09:15:330001dboGRANT VIEW DEFINITION ON [dbo].[vista_productos] TO [db_view]
Tabla resultante de sacar los Grants con el script.

Descripción de los Campos

  • object_id: Identificador único del objeto en la base de datos.
  • name: Nombre de la vista.
  • schema_id: Identificador del esquema al que pertenece la vista.
  • parent_object_id: Identificador del objeto padre (en el caso de las vistas, este valor suele ser 0).
  • type: Tipo de objeto (V indica que es una vista).
  • type_desc: Descripción del tipo de objeto.
  • create_date: Fecha de creación de la vista.
  • modify_date: Fecha de última modificación de la vista.
  • is_ms_shipped: Indica si es una vista interna de Microsoft (0 significa que no lo es).
  • is_published: Indica si la vista está publicada.
  • is_schema_published: Indica si el esquema está publicado.
  • schema_name: Nombre del esquema al que pertenece la vista.
  • GRANT_VIEW_COMMAND: Comando GRANT generado automáticamente para otorgar permisos de definición de vista.

Resultado de la Extracción de las Vistas en SQL Server

Cada fila incluye una columna GRANT_VIEW_COMMAND, que contiene el comando SQL necesario para otorgar permisos VIEW DEFINITION a un usuario llamado db_view para la vista correspondiente. Por ejemplo:

  • Para la vista vista_ventas, el comando es: GRANT VIEW DEFINITION ON [dbo].[vista_ventas] TO [db_view];

Este enfoque automatiza la generación de comandos GRANT, facilitando la tarea de administrar permisos en múltiples vistas dentro de una base de datos.

Beneficios de Usar Vistas y GRANT en SQL Server

Seguridad

Las vistas permiten ocultar columnas sensibles y controlar el acceso a los datos. Al usar vistas, podemos asegurarnos de que los usuarios solo vean la información que necesitan.

Simplicidad

Las vistas simplifican las consultas complejas. En lugar de escribir consultas largas y complicadas, podemos crear una vista y referenciarla como si fuera una tabla.

Mantenimiento

Las vistas hacen que el mantenimiento de las bases de datos sea más manejable. Si la estructura subyacente de las tablas cambia, solo necesitamos actualizar la vista en lugar de cambiar todas las consultas que la utilizan.

Control de Accesos

El uso del comando GRANT facilita la administración de permisos, asegurando que solo los usuarios autorizados puedan ver o modificar la definición de las vistas.

Conclusión

La gestión de vistas y permisos en SQL Server es una práctica esencial para mantener la seguridad y la eficiencia en la administración de bases de datos. Al automatizar la extracción de vistas y la generación de comandos GRANT, podemos ahorrar tiempo, reducir errores y asegurarnos de que nuestras bases de datos estén bien protegidas.

Implementar estas prácticas en tu trabajo diario no solo mejorará la seguridad de tus datos, sino que también te ayudará a mantener un control más preciso sobre quién puede acceder y modificar la información en tu base de datos. ¡Empieza hoy mismo y optimiza la seguridad de tu SQL Server!

Qué es la temp-db en sql

Eliminar usuarios huérfanos SQL server

Script para saber el histórico de queries ejecutados SQL

Script Creación de Roles en SQL Server

Sacar permisos de Base de Datos SQL scripts

¿Qué hace DBCC CHECKDB?

Sacar permisos de Base de Datos SQL

Sacar permisos de Base de Datos SQL scripts

Cuando trabajamos con bases de datos SQL, es crucial gestionar adecuadamente los permisos para asegurar que solo los usuarios autorizados puedan acceder y modificar la información. Un aspecto vital de la administración de bases de datos es la capacidad de extraer y revisar los permisos asignados a diferentes roles y usuarios. En este blog, exploraremos cómo lograr esto de manera eficiente usando scripts SQL.

Importancia de la Gestión de Permisos en Bases de Datos SQL

La gestión de permisos es esencial por varias razones:

  1. Seguridad: Restringir el acceso a información sensible protege contra accesos no autorizados y posibles brechas de seguridad.
  2. Control: Permite definir quién puede ver y modificar datos específicos, ayudando a mantener la integridad de la información.
  3. Auditoría: Facilita el seguimiento de actividades y cambios realizados por diferentes usuarios, crucial para auditorías y cumplimiento normativo.

Conceptos Clave: Roles y Permisos en SQL

Antes de profundizar en cómo extraer permisos, es importante entender algunos conceptos básicos:

  • Roles: Son grupos de permisos que se pueden asignar a usuarios o a otros roles. SQL Server tiene roles predefinidos como db_owner y db_datareader, y permite la creación de roles personalizados.
  • Permisos: Son privilegios que determinan las acciones que los usuarios pueden realizar en la base de datos, como SELECT, INSERT, UPDATE, y DELETE.

Script para Extraer Roles de la Base de Datos SQL

A continuación, presento un script que te permitirá extraer los roles definidos en tu base de datos. Este script selecciona los roles no predefinidos y genera las declaraciones SQL necesarias para recrearlos.

SELECT 
'CREATE ROLE [' + dbU.[name] + '];'
FROM
sys.database_principals AS dbU
WHERE TYPE = 'R' AND is_fixed_role = 0
GO

Explicación del Script

  • sys.database_principals: Esta vista del sistema contiene información sobre los principales (usuarios y roles) en la base de datos.
  • WHERE TYPE = ‘R’ AND is_fixed_role = 0: Filtra los resultados para incluir solo los roles personalizados, excluyendo los roles predefinidos.

Ejemplo de Resultado

Supongamos que tienes los siguientes roles personalizados en tu base de datos: analyst y developer. El script generará el siguiente resultado:

CREATE ROLE [analyst];
CREATE ROLE [developer];

Ampliando el Script para Incluir Permisos de los Roles

Para hacer el script más completo, puedes ampliarlo para extraer no solo la creación de roles sino también sus permisos asociados. Aquí te dejo un ejemplo de cómo podrías hacerlo:

SELECT 
'CREATE ROLE [' + dbR.[name] + '];' + CHAR(13) +
STUFF((
SELECT CHAR(13) + 'GRANT ' + dp.permission_name + ' ON ' +
dp.class_desc + '::[' + OBJECT_NAME(dp.major_id) + '] TO [' + dbR.[name] + '];'
FROM sys.database_permissions dp
WHERE dp.grantee_principal_id = dbR.principal_id
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
, 1, 1, '')
FROM
sys.database_principals AS dbR
WHERE
TYPE = 'R' AND is_fixed_role = 0
GO


Explicación del Script Ampliado

  • sys.database_permissions: Esta vista contiene información sobre los permisos a nivel de base de datos.
  • GRANT … TO: Genera las declaraciones GRANT necesarias para cada permiso asignado a los roles personalizados.

Ejemplo de Resultado

Si el rol analyst tiene permisos SELECT en la tabla Customers, y el rol developer tiene permisos INSERT en la tabla Orders, el resultado sería:

CREATE ROLE [analyst];
GRANT SELECT ON OBJECT::[Customers] TO [analyst];

CREATE ROLE [developer];
GRANT INSERT ON OBJECT::[Orders] TO [developer];

Ampliando el Script para Incluir Permisos de los Usuarios SQL

Además de los roles, también es importante extraer los permisos asignados directamente a los usuarios. Aquí tienes un script que extrae los usuarios de la base de datos y sus permisos:

SELECT 
'CREATE USER [' + dp.name + '] FOR LOGIN [' + dp.name + '];' + CHAR(13) +
STUFF((
SELECT CHAR(13) + 'GRANT ' + p.permission_name + ' ON ' +
p.class_desc + '::[' + OBJECT_NAME(p.major_id) + '] TO [' + dp.name + '];'
FROM sys.database_permissions p
WHERE p.grantee_principal_id = dp.principal_id
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
, 1, 1, '')
FROM
sys.database_principals dp
WHERE
dp.type_desc = 'SQL_USER'
GO

Explicación del Script de Usuarios

  • sys.database_principals: Se usa nuevamente para obtener los usuarios de la base de datos.
  • CREATE USER … FOR LOGIN: Crea las declaraciones para recrear los usuarios en la base de datos.
  • GRANT … TO: Añade las declaraciones GRANT para cada permiso asignado a los usuarios.

Ejemplo de Resultado

Si el usuario john tiene permisos SELECT en la tabla Customers, y el usuario jane tiene permisos INSERT en la tabla Orders, el resultado sería:

CREATE USER [john] FOR LOGIN [john];
GRANT SELECT ON OBJECT::[Customers] TO [john];

CREATE USER [jane] FOR LOGIN [jane];
GRANT INSERT ON OBJECT::[Orders] TO [jane];

Combinando Todo en un Solo Script

Para mayor eficiencia, puedes combinar los scripts de roles y usuarios en un solo script que extraiga y recree tanto roles como usuarios y sus permisos. Aquí te dejo el script combinado:

-- Extraer Roles
SELECT
'CREATE ROLE [' + dbR.[name] + '];' + CHAR(13) +
STUFF((
SELECT CHAR(13) + 'GRANT ' + dp.permission_name + ' ON ' +
dp.class_desc + '::[' + OBJECT_NAME(dp.major_id) + '] TO [' + dbR.[name] + '];'
FROM sys.database_permissions dp
WHERE dp.grantee_principal_id = dbR.principal_id
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
, 1, 1, '')
FROM
sys.database_principals AS dbR
WHERE
TYPE = 'R' AND is_fixed_role = 0
GO

-- Extraer Usuarios
SELECT
'CREATE USER [' + dp.name + '] FOR LOGIN [' + dp.name + '];' + CHAR(13) +
STUFF((
SELECT CHAR(13) + 'GRANT ' + p.permission_name + ' ON ' +
p.class_desc + '::[' + OBJECT_NAME(p.major_id) + '] TO [' + dp.name + '];'
FROM sys.database_permissions p
WHERE p.grantee_principal_id = dp.principal_id
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
, 1, 1, '')
FROM
sys.database_principals dp
WHERE
dp.type_desc = 'SQL_USER'
GO

Explicación del Script Combinado

Este script ejecuta tanto la extracción de roles como de usuarios en una sola consulta, generando todas las declaraciones necesarias para recrear la estructura de permisos de tu base de datos.

Conclusión

La correcta gestión de permisos es vital para la seguridad y el control en una base de datos SQL. Con los scripts proporcionados, puedes extraer y revisar los roles y permisos de tu base de datos de manera eficiente. Esto no solo facilita la administración, sino que también te permite mantener un control más riguroso sobre quién tiene acceso a qué información.

Implementar y utilizar estos scripts te ayudará a fortalecer la seguridad de tu base de datos y garantizar que solo los usuarios autorizados tengan los permisos adecuados. No dudes en personalizar estos scripts según las necesidades específicas de tu entorno.

SQL: ¿Configurar los Archivos LDF y MDF en Unidades Distintas es Importante?

dm_exec_procedure_stats en SQL Server

Monitoreo y Mantenimiento SQL: Mantén Tu Base de Datos Saludable

¿Qué es un SGBDR SQL Server? Todo lo que Necesitas Saber

Script para saber el histórico de queries ejecutados SQL