Estoy trabajando en una base de datos de terceros.
Cuando trato de ver la definición de una vista haciendo clic derecho CREATE TO
y luego en NEW QUERY EDIT WINDOW
, aparece un error:
Es posible que esta propiedad no exista para este objeto o que no se pueda recuperar debido a derechos de acceso insuficientes. El texto está encriptado.
-- Encrypted text
Respuestas:
Otra herramienta de terceros que podría usar para descifrar objetos cifrados sobre la marcha es el mensaje SQL de Red Gate: http://www.red-gate.com/products/sql-development/sql-prompt/features
Al pasar el cursor sobre el procedimiento almacenado, podrá ver el script de creación descifrado.
Descargos de responsabilidad: esta herramienta es comercial (con una prueba gratuita de 14 días) y trabajo para Red Gate.
fuente
Tengo una descripción bastante detallada sobre este problema aquí .
En resumen, el objeto no está realmente encriptado, sino más bien ofuscado. Por lo tanto, podemos recuperar el original de vuelta. El método es un poco complicado pero consta de estos pasos:
Seleccione el código ofuscado como este:
Reemplace el objeto con otro que tenga el mismo nombre, el mismo object_id y la misma longitud en bytes (por ejemplo, usando
ALTER PROCEDURE
)Eso te dará el código original. Sin embargo, como Kin mencionó, puede haber apoyo e incluso implicaciones legales para hacerlo, así que asegúrese de consultar primero a su abogado.
fuente
El texto del módulo se cifra utilizando un cifrado de flujo RC4 .
La clave de inicialización RC4 se calcula a partir del hash SHA-1 de:
Convertido de uniqueidentifier a binary (16)
Convertido de entero a binario little-endian (4)
convertida de smallint a little-endian binary (2) .
La ID del objeto del módulo es:
Un usuario con privilegios adecuados puede descifrar el módulo de la siguiente manera:
Más detalles y una implementación de código completo en mi artículo:
Lo interno de
WITH ENCRYPTION
fuente
Puede conectarse a SQL Server utilizando la Conexión de administrador dedicada (DAC) y luego ver el texto sql del procedimiento almacenado. Conéctese al DAC usando:
Puede encontrar los pasos completos necesarios en esta respuesta en Stack Overflow de Martin Smith .
Otra alternativa es utilizar algunos scripts de terceros como se menciona en Descifrar procedimientos almacenados cifrados, vistas, funciones en SQL Server 2005, 2008 y R2
Como nota al margen : si se trata de una base de datos de terceros y si lo hace en producción, ¿lo respaldará el proveedor? Puede haber una buena razón para cifrar los SP o las vistas. Probablemente sea mejor hacer una copia de seguridad y luego jugar con eso.
fuente
Si desea obtener una vista previa de la secuencia de comandos DDL original o descifrar un objeto cifrado, puede consultar Descifrar ApexSQL
Es una herramienta independiente gratuita, con una opción para integrarlo en SSMS, previsualizar el script DDL original. Además, puede descifrar objetos ubicados en varios servidores en un turno. Una herramienta más que puede ayudarlo es dbForge SQL Decryptor
fuente
Un método que uso a menudo para descifrar varios procedimientos almacenados a la vez ...
Use la comparación SQL de RedGate y compare su base de datos con una base de datos vacía (o cualquier base de datos que sepa que no tendrá los procedimientos almacenados). Cree un script de implementación y cópielo en SSMS. Encuentre y reemplace CON ENCRIPTACIÓN con espacios en blanco. Luego cambie el PROCEDIMIENTO DE CREACIÓN a ALTERAR PROCEDIMIENTO. Ejecute el script RedGate contra la base de datos original y ha eliminado todo el cifrado de procedimientos almacenados.
Tenía una base de datos con más de 400 procedimientos almacenados y, aunque SQL Prompt es útil, no valía la pena hacer clic derecho, copiar y pegar en más de 400 procedimientos almacenados. Utilizando RedGate SQL Compare, pude eliminar el cifrado de mis más de 400 procedimientos almacenados en aproximadamente 10 minutos, de principio a fin.
fuente