sql-server - engine - sql server management studio 2017
Error de SSMS 2016 Importación de Azure SQL v12 bacpac: claves maestras sin contraseña no admitida (4)
Lo he hecho docenas de veces, pero recientemente encontré este error. Estos son los pasos que he seguido para llegar aquí:
- Crear una copia de mi base de datos de Azure SQL v12 en el mismo servidor que el original
- Exporte la copia-versión (completamente inactiva de la interacción del usuario) para blob storage
- Descargue el archivo .bacpac del almacenamiento de blobs en mi disco local
- En SSMS (versión de octubre de 2016) mi instancia de servidor SQL local, haga clic con el botón secundario en Bases de datos y elija ''Importar aplicación de nivel de datos''
- Elija mi archivo bacpac descargado recientemente y comience la importación
Solo tardan unos segundos en explotar y aparece el error:
Error SQL72014: .Net SqlClient Data Provider: Msg 33161, Level 15, State 1, Line 1 Database master keys without password are not supported in this version of SQL Server
Error SQL72045: Script execution error. The executed script: CREATE MASTER KEY;
Seguí el mismo proceso para la misma base de datos hace 1,5 meses, todo funcionó bien ... ¿Alguien más está experimentando esto? Tengo la versión 14.0.61021.0 de SSDT instalada, no estoy seguro si eso importa o no. También estoy ejecutando SQL Server 2016 Developer Edition (v13.0.1722.0).
Bien, la forma en que terminé resolviendo este problema fue hacer lo siguiente:
- Cree una copia de la base de datos de SQL Azure en el mismo servidor que el original
En esa base de datos, ejecute el siguiente script:
ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = [password here];
- Siga los pasos 2 a 5 en la publicación original
No he visto documentación sobre esto, pero aparentemente cuando creas una base de datos SQL de Azure crea una clave maestra de base de datos (DMK) sin una contraseña, y en SQL Server 2016 esto no está bien. Espero que esto ayude a alguien más a salir.
Nota: Pude hacerlo porque solo quería que los datos de la base de datos original actualizaran mi copia de desarrollo local; no he investigado completamente las implicaciones de esto.
Necesitas:
- eliminar el objeto de la clave maestra del bacpac
- eliminar el objeto credencial del bacpac
Hay este script publicado en el blog de Microsoft, ejecútelo y hará todo lo anterior.
C:/PS> ./RemoveMasterKey.ps1 -bacpacPath "C:/BacPacs/Test.bacpac
Repara el bacpac corrupto creado al eliminar la clave maestra.
La Sugestion para ejecutar el script RemoveMasterKey, también creó un archivo bacpac dañado en mi caso al insertar  en el archivo model.xml en varios lugares.
Hay una forma de editar el bacpac extrayendo los archivos, eliminando los caracteres ofensivos en el archivo model.xml y luego generando una nueva suma de comprobación para el archivo Origin.xml
Una vez hecho esto, vuelva a copiar los archivos con la extensión .bacpac le permite importar el backpac.
Se encontró una reparación en: http://inworksllc.com/editing-sql-database-azure-bacpac-files/
generador de suma de comprobación: https://github.com/gertd/dac/tree/master/drop/debug
Pasos proporcionados:
1) Actualice el archivo zip con el modelo.xml modificado
2) Cambiar el nombre del archivo zip con la extensión bacpac
3) Ejecute dacchksum.exe /i:database.bacpac (donde database.bacpac es el nombre del archivo bacpac)
4) Actualice Origin.xml en el archivo bacpac con el nuevo valor proporcionado por dacchksum.exe
Yo tuve el mismo problema. Después de hablar con el soporte de Azure, descubrieron que el problema se debía a que se creó una clave maestra de base de datos en blanco para encriptar las credenciales de almacenamiento para la auditoría (la auditoría es una configuración opcional).
Tenga en cuenta que la configuración de auditoría de la base de datos se hereda de la configuración del servidor.
De todos modos, el trabajo que se les ocurrió fue:
- Deshabilitar la auditoría en el servidor (o base de datos)
- Suelta la clave maestra de la base de datos con el comando
DROP MASTER KEY
.
Entonces la exportación funciona como se esperaba. Es de esperar que Azure solucione este problema pronto para que la auditoría y la exportación puedan funcionar juntas.
Actualización 21 de marzo de 2017 Mejor solución de trabajo de MS
Como el arreglo tardará un tiempo en implementarse, también sugirieron una solución alternativa, que no requerirá ningún paso adicional (como inhabilitar la auditoría o los pasos del blog) de su lado para evitar este problema. Después de habilitar la auditoría, actualice la clave maestra y establezca la contraseña. Establecer una contraseña para la clave maestra existente mitigará el problema. Además, establecer la contraseña no afectará a la auditoría y seguirá funcionando. La sintaxis para agregar la contraseña es la siguiente:
-- execute in the user database
ALTER MASTER KEY ADD ENCRYPTION BY PASSWORD = ‘##############’;
El enlace también tiene un script de PowerShell que puede usar para eliminar la declaración SQL ofensiva del archivo .bacpac
.