SQL Server

SQL Ledger en video

Ya hablamos en este blog de la funcionalidad Ledger o Libro de Contabilidad de las bases de datos SQL aquí. Por eso, hoy he decidido dedicarle un vídeo para que podáis verlo en acción y comprobar como de útil puede ser para vosotros.

La función ledger o «libro de contabilidad» en SQL Server y Azure SQL registra operaciones de datos, incluyendo detalles del usuario, fecha, hora y tipo de operación. Cada registro está enlazado criptográficamente al anterior, creando una cadena inalterable. Cada registro tiene una firma digital, lo que previene modificaciones sin rastro. Esto permite auditar y verificar la historia de los datos, detectar manipulaciones y cumplir con normativas de seguridad. En Azure SQL, se ofrece un servicio adicional, Azure SQL Ledger, que añade una capa de seguridad almacenando los hashes del libro de contabilidad en un servicio externo basado en blockchain. Esto lo hace especialmente útil en entornos donde, por su criticidad, tenemos que llevar un control exhaustivo de los cambios realizados en los datos.

Espero que te haya gustado el video, si es así por favor, deja tu me gusta y suscríbete al canal que nos ayuda mucho. Si quieres ver más videos como este puedes encontrarlos todos aquí. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram al que te puede unir. En este grupo estamos creando una comunidad de usuarios y administradores de SQL Server donde cualquiera pueda preguntar sus dudas y compartir sus casos prácticos para que todos seamos mejores profesionales. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, Videos, 0 comentarios

DB_CHAINING: Una configuración de seguridad peligrosa

Continuamos con el tema del pasado lunes donde hablábamos de la configuración trustworthy de SQL Server. Una configuración de seguridad con unos riesgos de seguridad añadidos que es muy importante que conozcamos. Como os decía antes de irme por las ramas, hoy continuamos con ese tema y es el turno de la opción de configuración db_chaining, una configuración también de seguridad que nos va a permitir simplificar mucho los permisos, no sin riesgos claro. Quédate hasta el final que te voy a contar todos los secretos.

¿Qué es DB_Chaining?

DB_Chaining es una opción de configuración en SQL Server que, cuando está habilitada, permite a los objetos de una base de datos acceder a los objetos de otra base de datos que tienen el mismo propietario. Esto puede ser útil en situaciones donde las bases de datos necesitan compartir información, pero también plantea ciertos riesgos de seguridad que deben ser considerados cuidadosamente.

Normalmente, si un usuario tiene permiso para ejecutar un procedimiento almacenado, y ese procedimiento tiene referencias a otros objetos en la base de datos, el usuario necesita tener permisos para esos objetos también. Esto es el comportamiento por defecto de SQL Server y las bases de datos de Azure SQL ya que db_chaining por defecto está deshabilitado. Sin embargo, cuando DB_Chaining está habilitado, SQL Server trata las cadenas de propiedad de los objetos de la base de datos de manera diferente.Si el procedimiento almacenado y el objeto al que hace referencia tienen el mismo propietario, SQL Server permite que el procedimiento acceda al objeto sin comprobar los permisos del usuario para ese objeto.

db_chaining

Esto que acabamos de ver puede ser útil en situaciones donde se desea simplificar la administración de permisos. Por ejemplo, si tienes varias bases de datos que necesitan compartir información, puedes tener procedimientos almacenados en una base de datos que leen o escriben en tablas en otra base de datos. Sin DB_Chaining, tendrías que dar a los usuarios permisos para las tablas en ambas bases de datos. Con DB_Chaining, puedes dar a los usuarios permisos para ejecutar los procedimientos almacenados, y los procedimientos pueden acceder a las tablas sin que los usuarios tengan permisos directos para ellas. 

Consideraciones de Seguridad

Aunque DB_Chaining puede ser útil, también plantea riesgos de seguridad. Cuando DB_Chaining está habilitado, un usuario que tiene permiso para ejecutar un procedimiento almacenado puede potencialmente acceder a cualquier objeto en la base de datos que tenga el mismo propietario que el procedimiento. Si no se gestiona correctamente, esto podría permitir a los usuarios acceder a información a la que no deberían tener acceso.

Por lo tanto, antes de habilitar DB_Chaining, es importante entender completamente sus implicaciones de seguridad y asegurarse de que todas las bases de datos y objetos estén correctamente asegurados. Además, y esto es recomendación personal más que buenas prácticas, no os recomiendo habilitarlo para bases de datos donde los usuarios tengan permisos de control (para crear modificar los objetos) ya que podrían crear una vista para leer datos que no deberían o, peor aún, un procedimiento almacenado para editar los datos.

Conclusión

La configuración de DB_Chaining en SQL Server es una herramienta poderosa que puede simplificar la administración de permisos y facilitar el intercambio de información entre bases de datos. Sin embargo, también plantea riesgos de seguridad que deben ser cuidadosamente considerados y gestionados. Como siempre, la clave para usar DB_Chaining de manera efectiva y segura es entender completamente cómo funciona y seguir las mejores prácticas de seguridad de la información.

Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, 1 comentario

MERGE: Una instrucción para dominar a todas (T-SQL Avanzado)

Hoy os he creado un video tutorial detallado sobre cómo usar la función MERGE en T-SQL. He intentado que el video sea una buena herramienta tanto para los principiantes que buscáis entender los fundamentos de MERGE, como para profesionales de SQL que deseen refrescar sus conocimientos.

En este video, desgloso los conceptos fundamentales de la función MERGE y te muestro cómo puedes utilizarla para combinar datos de dos tablas en SQL Server. Aprenderás a realizar operaciones de inserción, actualización y eliminación en una sola instrucción, lo que te permitirá manejar tus datos de manera más eficiente.

Merge

Casos de uso de MERGE

Además de enseñarte cómo usar MERGE, déjame contarte algunos escenarios comunes en los que la función MERGE puede serte especialmente útil. Principalmente la vas a usar para sincronización de tablas (como hemos visto en el video), actualización de datos basada en condiciones específicas o la combinación de datos de múltiples fuentes. Al entender estos casos de uso, podrás ver el verdadero poder de MERGE y cómo puede facilitar tu trabajo con SQL Server con un código más limpio y más eficiente.

Espero que te haya gustado el video, si es así por favor, deja tu me gusta y suscríbete al canal que nos ayuda mucho. Si quieres ver más videos como este puedes encontrarlos todos aquí. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram al que te puede unir. En este grupo estamos creando una comunidad de usuarios y administradores de SQL Server donde cualquiera pueda preguntar sus dudas y compartir sus casos prácticos para que todos seamos mejores profesionales. ¡Hasta la próxima!

Publicado por Roberto Carrancio en SQL Server, Videos, 1 comentario

TRUSTWORTHY: La opción que no debes habilitar

Como DBAs de SQL Server tenemos que ser verdaderos expertos en las configuraciones de las bases y datos y comprender a la perfección todas las implicaciones de cada una de estas opciones configurables. Una de las opciones con las que más cuidado hay que tener es la propiedad TRUSTWORTHY (confiable en nuestro idioma). Si lleváis tiempo en esto de la administración de bases de datos es probable que en varias ocasiones os hayáis visto envueltos en debates sobre el uso de esta opción. Trustworthy es una configuración de la base de datos que afecta directamente a la seguridad, sobre todo en lo que a ejecución de código se refiere. Su configuración es clave en el comportamiento de todos los objetos de base de datos que se ejecuten con “WITH EXECUTE AS” y en los componentes CLR marcados como EXTERNAL_ACCESS o UNSAFE.

¿Para qué sirve Trustworthy?

Ahora que ya sabemos que trustworthy es una configuración de base de datos vamos a ver qué es lo que hace. Cuando habilitamos esta configuración (por defecto está deshabilitada) lo que estamos haciendo es decirle a SQL Server que confíe en los objetos de esa base de datos en lo que a seguridad (autenticación y autorización) se refiere. Como hemos visto, esto afecta a los objetos (funciones y procedimientos) que usan EXECUTE AS y a los módulos CLR. Veamos uno a uno estos casos.

Objetos con EXECUTE AS

Cuando trustworthy está habilitado, los módulos T-SQL que usen la opción execute as podrán ejecutarse impersonándose con cualquier otro usuario. Si estos otros usuarios tienen asociado un login con permisos elevados o con usuarios con permisos sobre otras bases de datos vamos a poder acceder a todas las funcionalidades que tendría ese login.

Por ejemplo, imaginad que tenemos dos bases de datos: ventas y contabilidad. Tenemos tres usuarios: vendedor, contable y gerente. Supongamos que el usuario vendedor tiene sólo acceso a ventas, el usuario contable tiene sólo acceso a contabilidad y el usuario gerente tiene acceso a las dos bases de datos. Gracias a tener la propiedad trustworthy habilitada el usuario vendedor va a poder actuar bajo el contexto de seguridad del usuario Gerente y así acceder a datos de contabilidad con sus mismos permisos. Lo mismo para el usuario contable en la otra base de datos.

Módulos CLR

Para las integraciones de CLR (Common Language Runtime) la propiedad trustworthy va a permitir ejecutar ensamblados marcados como EXTERNAL ACCESS o UNSAFE y, gracias a ello, acceder a recursos externos del sistema o de la red que de otra manera no estarían permitidos en este contexto de seguridad.

El peligro de trustworthy

Ahora es cuando viene la historia de terror. Tener trustworthy habilitado en nuestra base de datos puede ser un vector para una escalada de privilegios. Os lo voy a demostrar. Para esta demo vamos a crear una base de datos llamada TrustyDB y vamos a habilitar la opción trustworthy. Vamos a crear un login llamado LoginTrusty. Después pondremos como propietario de nuestra base de datos al usuario “sa”, esto es una buena práctica. Por último vamos a crear un usuario UsurioTrusty para nuestro LoginTrusty y darle permisos de db_owner sobre la base de datos.

En este momento nuestro login tiene un usuario con permisos de db_owner sobre la base de datos pero no tiene permisos elevados a nivel de servidor. Tampoco es el propietario de la base de datos. Sin embargo, gracias a la propiedad trustworthy va a poder crear un procedimiento almacenado que se ejecute bajo el contexto de seguridad del propietario de la base de datos (recordad que es el sa) y añadirse al rol de servidor sysadmin.

Acabamos de ver un ejemplo en el que un usuario ha logrado escalar privilegios hasta convertirse en sysadmin. Este es uno de los problemas de habilitar trustworthy junto con el que ya habíamos comentado antes de acceder a datos de otras bases de datos sobre las que no tienes permisos. Otros problemas están relacionados con el uso de CLR ya que va a permitir acceder a información contenida en el sistema operativo (fuera del servidor de base de datos) o incluso de la red, interacciones que no estarían permitidas sin esta propiedad. La propiedad de trustworthy está pensada para eludir medidas de seguridad como la forma de módulos CLR o el uso de certificados para la elevación de privilegios controlada sobre todo en entornos de prueba o desarrollo. 

Buenas prácticas con Trustworthy

Como has podido ver, habilitar trustworthy conlleva un riesgo alto de seguridad por lo que la primera recomendación sería habilitarlo con precaución y sólo cuando sea imprescindible. Revisa muy bien los requisitos de cada escenario y determina si es o no necesario habilitarlo. Intenta una alternativa siempre que sea posible, por ejemplo para el caso de CLR la firma de código y uso de certificados te permitirá una gestión más segura de los permisos. Si no te queda más remedio que habilitar trustworthy refuerza tus controles de acceso, sigue una política de permisos mínimos para los usuarios y habilita auditorías para detectar cambios en los permisos y así como acceso a datos críticos.

Como activar Trustworthy

Realmente ya lo hemos visto en el ejemplo de arriba, podemos activar la propiedad trustworthy en las bases de datos que necesitemos con el siguiente código:

Una cosa importante que debemos tener muy en cuenta es que esta propiedad no solo está desactivada por defecto para todas las bases de datos sino que SQL Server no puede confiar en una base de datos nueva por defecto. Por este motivo, aunque tengamos la propiedad habilitada siempre que restauremos la base de datos desde un backup o separemos y adjuntemos (detach y attach) la base de datos con trustworthy habilitado esta propiedad va a estar deshabilitada y tendremos que ser nosotros quien la habilite manualmente. Esto va a pasar, sea el mismo servidor o uno distinto.

Conclusión

En resumen, habilitar la configuración de trustworthy puede ser indispensable para algunas funcionalidades de nuestro proyecto, pero si no es nuestro caso debemos evitar su uso para evitar riesgos de seguridad innecesarios. Ahora que ya comprendes su funcionamiento y los riesgos de habilitarlo seguro que te lo vas a pensar dos veces antes de concederles esa petición al usuario que te pide habilitarlo. Si no te queda más remedio recuerda las buenas prácticas y las precauciones que hemos visto en este artículo.

Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, 1 comentario

Agente de SQL

Mucho hemos hablado en este blog de tareas de mantenimiento que programamos en Jobs del agente de SQL, con algún vídeo incluso. También hemos hablado de las alertas. Sin embargo no habíamos dedicado un artículo al Agente de SQL en general. Aunque no vamos a negar que son la piedra angular de este servicio, el agente es bastante más que solo los jobs, y eso es lo que la gran mayoría de los usuarios y DBAs desconocen, sobre todo los menos experimentados.

Jobs del agente

Como ya hemos dicho, los jobs son la principal función del agente de SQL y prácticamente todo lo demás gira en torno a ellos. Pero, ¿qué son los jobs?. Los jobs o trabajos del agente de SQL Server son tareas programadas que podremos crear en el agente de SQL Server para que las ejecute en un horario o en respuesta a un evento específico. Podemos incluir en un job uno o más pasos, cada uno de los cuales realizará una acción específica. 

Podemos utilizar jobs para realizar una variedad de funciones, como la ejecución de procedimientos almacenados, ejecución de consultas SQL o para tareas de mantenimiento. Pero no solo scripts de SQL, los jobs del agente de SQL Server también admiten comandos cmd o powershell o ejecuciones de SSIS o SSAS. Existen también tipos de jobs específicos para la replicación.

Para los usuarios más avanzados, estos jobs los podemos encontrar en la tabla sysjobs del esquema dbo de la base de datos msdb. En esta misma base de datos y esquema podemos encontrar los pasos de estos jobs en la tabla sysjobstesp y las programaciones en la tabla sysschedules. Esta última tabla se relaciona con la de jobs a través de la tabla sysjobsschedules. Completan este grupo de tablas sysjobactivity, sysjobhistory y sysjobstepslogs. Con estas tablas podemos generar nuestras propias consultas para visualizar todo lo que necesitemos.

Configuración de los jobs del Agente

Las capacidades de configuración de los jobs de SQL son tantas que rara vez he visto a usuarios sacarles todo el provecho. En ocasiones directamente no se aprovechan. Por un lado tenemos las configuraciones propias del agente de las que hablaremos más adelante, por otro las de los jobs y por último las configuraciones particulares de cada paso de los jobs. 

En las configuraciones de los jobs podremos encontrar las relativas a su información general, sus pasos y programaciones además de alertas, notificaciones y servidores donde se va a ejecutar. Porque sí, el agente de SQL tiene la capacidad de actuar sobre uno o varios servidores SQL de nuestra red. 

Los pasos también tienen sus configuraciones específicas donde, además de configurar el propio paso, podremos definir su comportamiento al terminar con éxito o error, sus opciones de logado (a disco o tabla) y si deseamos que se ejecute con una cuenta específica.

Operadores y proxies del Agente

En lo tocante a los, podremos encontrar en el agente Operadores o Proxies (proxys), cada uno de ellos objetos que van a realizar una función distinta. 

Por un lado, los operadores son destinatarios de los avisos del agente. Definiremos su nombre y su dirección de correo. También podremos configurar un pager email para estos operadores, si es que alguien sigue usando los antiguos “buscas” o “beepers” en pleno año 2024. Por último podremos definir un horario para que solo puedan recibir alertas en las horas establecidas.

Por otro lado, podemos configurar proxies, un objeto totalmente distinto al que asociaremos una credencial de una cuenta para luego poder configurar los pasos de los jobs para que se ejecuten bajo el contexto de seguridad de esa cuenta de AD. Los proxies se hacen necesarios para ejecutar tareas de SSIS, CMD o PowerShell que impliquen recursos ajenos a SQL Server como archivos del servidor o de la red.

Alertas

En este apartado no nos vamos a extender mucho, ya le dedicamos un artículo entero a esta opción donde os compartí como hago yo para configurarlo. En resumen, el Agente SQL Server lee el log de SQL y compara los eventos con las alertas definidas. Cuando el Agente SQL Server encuentra una coincidencia, activa una alerta, que es una respuesta automatizada a un evento y puede ser la ejecución de un job, el envió de un mail a un operador o ambas. Las alertas pueden responder a eventos de SQL Server, condiciones de rendimiento de SQL Server y eventos de Instrumental de administración de Windows (WMI).

Para definir una alerta, debes especificar: el nombre de la alerta, el evento o condición de rendimiento que desencadena la alerta, y la acción que el Agente SQL Server realiza como respuesta al evento o condición de rendimiento. 

Configuración del agente 

Como os he adelantado antes, el agente dispone de una configuración general que es importante que revisemos y adaptemos a nuestras necesidades. Por un lado vamos a poder configurar desde el comportamiento frente a un fallo que detenga el servicio hasta el reenvío de logs a un servidor distinto cuando el agente forme parte de un grupo de servidores. 

Sin embargo, las configuraciones más importantes para mi son las que tienen que ver con habilitar el uso de dbmail para poder responder a alertas o notificaciones de los jobs. Es importante también que configuremos un fail-safe operator. Este es un operador que va a recibir las notificaciones en caso de que estas no puedan ser entregadas a los operadores designados en las notificaciones o las alertas por un error. Este operador solo recibirá las alertas como última opción y solo puede ser definido por un usuario sysadmin. 

Para terminar con las configuraciones del agente de SQL que me parecen importantes tenemos las relativas al historial de ejecuciones de los jobs. Aquí vamos a poder definir tanto el máximo de historiales de un job como el general que vamos a admitir. Esto es importante porque una mala configuración puede hacer que perdamos información o que se nos llegue a llenar el disco. Cualquiera de los dos extremos no es aceptable.

Permisos sobre el agente

Llegamos a uno de los puntos que más controversia generan, aquí tenemos el elefante en la habitación y vamos a soltarlo ya. Los permisos del agente se asignan asignando a los usuarios a roles fijos de la base de datos msdb. Son permisos cerrados sobre los que no vamos a poder actuar y es necesario que conozcamos sus particularidades y limitaciones. Los roles que nos vamos a encontrar son:

  • SQLAgentUserRole: Es el rol con menos privilegios, solo va a tener permisos sobre los operadores (sólo visualización) y sobre los jobs solo va a poder actuar sobre los que le pertenecen y podrá verlos así como editarlos, habilitarlos o deshabilitarlos e iniciarlos y detenerlos. En caso de estar ante un grupo de servidores solo va a tener acceso a los jobs locales y siempre solo los que estén a su nombre. 
  • SQLAgentReaderRole: Va un paso más allá que el anterior y además de todos los permisos anteriores permite listar los objetos como operadores, proxies y alertas. También verá todos los jobs así como su historial de ejecución aunque solo podrá editar, iniciar o detener los de su pertenencia.
  • SQLAgentOperatorRole: Es el más avanzado de los roles del agente e incluye, además de todo lo anterior, la posibilidad de ver las propiedades de los operadores y los proxies. Los usuarios de este rol no tienen tampoco permisos de modificación sobre ningún job que no sea de su propiedad. Esto queda limitado en exclusiva a los usuarios sysadmin. Lo único que van a poder hacer sobre los jobs que no sean de su propiedad es iniciarlos, detenerlos o habilitarlos y deshabilitarlos.

Como veis los usuarios no sysadmin no van a poder editar jobs que no sean suyos bajo ninguna circunstancia. A esto hay que sumarle que no se pueden poner grupos de usuarios o roles como propietarios de los trabajos. 

Conclusión

El agente de SQL es un servicio que acompaña a SQL server y que nos va a facilitar en gran medida la programación de tareas y las labores de administración. Sin embargo su limitación en la gestión de permisos nos va a suponer un desafío al que todos los DBAs nos vamos a tener que enfrentar varias veces a lo largo de nuestra carrera. Por desgracia, a dia de hoy solo queda resignarnos y explicar al usuario lo que pasa.

Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, 1 comentario

Cambiar propietario Jobs SQL

Cambiar el propietario de nuestros Jobs de SQL Server a priori es una tarea manual que debemos hacer uno a uno. Este es un proceso común cuando un usuario propietario de varios jobs abandona la compañía o cambia de rol y sus trabajos deben ser asignados a otra persona. Sin embargo, con un poco de conocimiento sobre las tablas y procedimientos de sistema de la MSDB y con código T-SQL dinámico vamos a poder automatizar el proceso.

Para cambiar automáticamente el propietario de todos los jobs de un usuario a otro usaremos el siguiente script. Como has podido ver en el video lo que hace es generar dinámicamente los procedimientos sp_update_job y sp_update_schedule con los parámetros necesarios para cada uno de los jobs y programaciones y el nuevo propietario. Para ello hace uso de las tablas de la base de datos msdb sysjobs, sysjobsschedules y sysschedules cruzando estas con la vista syslogins de master donde encontraremos los logins. De esta manera podemos localizar fácilmente los jobs que pertenecían al antiguo usuario y que debemos cambiar el propietario.

Espero que te haya gustado el video, si es así por favor, deja tu me gusta y suscríbete al canal que nos ayuda mucho. Si quieres ver más videos como este puedes encontrarlos todos aquí. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram al que te puede unir. En este grupo estamos creando una comunidad de usuarios y administradores de SQL Server donde cualquiera pueda preguntar sus dudas y compartir sus casos prácticos para que todos seamos mejores profesionales. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, Videos, 0 comentarios

¡Adiós al error 0x851A001A! Instala SQL sin problemas en Windows 11

¿Te encuentras con el error 0x851A001A al instalar SQL en tu nuevo equipo con Windows 11? ¡No te preocupes! Este error es común y tiene una solución sencilla. En este artículo te explico qué es lo que lo provoca y cómo puedes solucionarlo para poner en marcha tu instancia de SQL en cuestión de minutos.

El error 0x851A001A: un obstáculo común

En varias ocasiones me he topado con clientes que presentaban problemas con sus instalaciones de SQL al tratar de realizarlas sobre equipos nuevos en los que se había instalado Windows 11. El error en cuestión se trata del 0x851A001A, y es un error contemplado por Microsoft.

0x851A001A

Este fallo se produce durante la instalación de cualquier versión de SQL, debido a que el instalador de SQL no es capaz de realizar ciertas acciones de configuración. Como os digo, este error suele producirse en los equipos con sistemas operativos Windows 11, pero os diré que, en alguna ocasión poco habitual, me he visto en la misma situación con otros sistemas.

¿Qué es el tamaño de sector de disco y por qué es importante?

El tamaño del sector de un disco duro hace referencia a la cantidad de información que puede almacenar cada una de las secciones lógicas en las que se divide. Ya hablamos de este tema sin profundizar tanto en este artículo. Este tamaño es importante ya que afecta a distintos factores:

  • Eficiencia de almacenamiento: Un sector más grande será capaz de almacenar una cantidad de información mayor, necesitando menos espacio en el disco para guardarla, y, por tanto, optimizando el espacio.
  • Rendimiento: En general, cuanto mayor sea el tamaño del sector, más rápido realizará las operaciones de lectura y escritura de datos.
  • Compatibilidad: No todos los sistemas operativos ni todos los programas son compatibles con todos los tamaños de sector.

¿Por qué se produce el error 0x851A001A?

En muchos de los discos actuales podemos encontrar tamaños de sector de 4096 bytes, pero en discos más antiguos podemos encontrar sectores de 512 bytes. Aunque según Microsoft estos tamaños deberían ser compatibles con SQL, es en estos casos cuando nos topamos con nuestro error 0x851A001A.

En este punto, vamos a entrar en el terreno de lo que llamaremos “especulación responsable”, para tratar de explicar qué es lo que está sucediendo en estos casos, ya que he buscado información al respecto, pero no he encontrado ninguna causa concreta. En mi opinión, creo que los discos duros más nuevos, que permiten trabajar con tamaños de sector de disco mayores, en algún punto de la instalación de Windows 11 pasan a emular un tamaño de sector menor, como por ejemplo 4096 bytes, que es compatible con SQL. Sin embargo, debe haber algún error en esta emulación que provoca que SQL detecte que el tamaño del sector del disco, es mayor, y por tanto nos devuelve el error de compatibilidad.

¿Por qué creo esto? Porque de momento no me he topado con este error en equipos que ya estaban en funcionamiento, por ejemplo con un Windows 10 y se han actualizado a Windows 11; y si me ha pasado con equipos nuevos en los que se había instalado Windows 11, donde los discos son más modernos.

En cualquiera de los casos, seguro que estás pensando, todo esto está muy bien, pero ¿cómo lo soluciono? Pues vamos a verlo.

Solución rápida y efectiva

Para solucionar este problema y disfrutar de SQL en tu Windows 11, o cualquier otro sistema, tendrás que modificar el Registro de Windows. Para hacerlo de una forma sencilla, solo tienes que abrir una ventana de Powershell como administrador y seguir estos pasos:

  1. Comprueba el tamaño del sector de tu disco:

* Recuerda reemplazar C: con la letra de tu unidad de disco.

  1. Modifica el tamaño del sector:
  1. Comprueba el cambio:
  1. Reinicia tu equipo.

¡Instalación de SQL sin errores!

Una vez completado este proceso, podrás instalar SQL en tu Windows 11 sin problemas, y el error 0x851A001A será cosa del pasado.

Recursos adicionales:

Por último, te dejo algunos enlaces con más información al respecto:

https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/database-file-operations/troubleshoot-os-4kb-disk-sector-size?WT.mc_id=DP-MVP-5440

https://www.zentinels.net/solucion-al-error-0x851a001a-al-instalar-sql-server

https://learn.microsoft.com/en-us/answers/questions/1367064/unable-to-install-sql-server-2019-on-windows-11-ex

Espero humildemente que este pequeño artículo te ayude a resolver este error, y por supuesto, si tienes alguna recomendación adicional, o quieres hacer alguna aportación; te invito a sumarte en los comentarios para que así podamos seguir aprendiendo como comunidad

#SQLServer #Windows11 #Error0x851A001A #InstalacionSQL #SolucionProblemas #Aprendizaje #Somoscomunidad #Tecnología

El conocimiento es poder. El aprendizaje es el camino hacia el poder

John F. Kennedy
Publicado por Sergio Isidro García en SQL Server, 0 comentarios