Je travaille sur une base de données tierce.
Lorsque j'essaie d'afficher la définition d'une vue en cliquant avec le bouton droit, CREATE TO
puis à NEW QUERY EDIT WINDOW
, Je reçois une erreur:
Cette propriété peut ne pas exister pour cet objet ou peut ne pas être récupérable en raison de droits d'accès insuffisants. Le texte est crypté.
Un autre outil tiers que vous pourriez utiliser pour déchiffrer des objets chiffrés à la volée est l'invite SQL de Red Gate: http://www.red-gate.com/products/sql-development/sql-Prompt/features
En survolant la procédure stockée, vous pourrez alors voir le script de création décrypté.
Avertissements: cet outil est commercial (avec un essai gratuit de 14 jours) et je travaille pour Red Gate.
J'ai une description assez détaillée de ce problème ici .
Bref, l'objet n'est pas vraiment chiffré, mais plutôt obscurci. Par conséquent, nous pouvons récupérer le dos d'origine. La méthode est un peu impliquée mais elle comprend les étapes suivantes:
Sélectionnez le code obscurci comme ceci:
SELECT @secret = imageval
FROM sys.sysobjvalues
WHERE objid = OBJECT_ID(@object_name);
Remplacez l'objet par un autre qui porte le même nom id_objet et la même longueur en octets (par exemple en utilisant ALTER PROCEDURE
)
Cela vous donnera le code d'origine. Cependant, comme Kin l'a mentionné, il peut y avoir un soutien et même des implications juridiques à ce sujet, alors assurez-vous de consulter d'abord votre avocat.
Le texte du module est chiffré à l'aide d'un chiffrement de flux RC4 .
La clé d'initialisation RC4 est calculée à partir du SHA-1 hachage de:
Le sous-ID d'objet du module est:
Un utilisateur convenablement privilégié peut ensuite déchiffrer le module en:
Plus de détails et une implémentation complète du code dans mon article:
Vous pouvez vous connecter à SQL Server à l'aide de la Dedicated Administrator Connection (DAC) puis afficher le texte sql de la procédure stockée. Connectez-vous au DAC en utilisant:
admin:Your_Servername
Vous pouvez trouver toutes les étapes nécessaires dans cette réponse sur Stack Overflow par Martin Smith .
Une autre alternative consiste à utiliser certains scripts tiers comme mentionné dans Décryptage des procédures stockées cryptées, des vues, des fonctions dans SQL Server 2005, 2008 et R2
En guise de remarque - s'il s'agit d'une base de données tierce et si vous le faites sur prod, le vendeur la prendra-t-il en charge? Il peut y avoir une bonne raison de crypter les SP ou les vues. Il est probablement préférable de faire une sauvegarde, puis de jouer avec.
Si vous souhaitez prévisualiser le script DDL d'origine ou décrypter un objet crypté, vous pouvez consulter ApexSQL Decrypt
Il s'agit d'un outil autonome gratuit, avec une option pour l'intégrer dans SSMS, prévisualiser le script DDL d'origine. En outre, vous pouvez déchiffrer des objets situés sur plusieurs serveurs en un seul tour. Un autre outil qui peut vous aider est dbForge SQL Decryptor
Une méthode que j'utilise souvent pour décrypter plusieurs procédures stockées à la fois ...
Utilisez la comparaison SQL de RedGate et comparez votre base de données avec une base de données vide (ou toute base de données que vous connaissez n'aura pas les procédures stockées). Créez un script de déploiement et copiez-le dans SSMS. Trouvez et remplacez AVEC CHIFFREMENT avec un espace blanc. Modifiez ensuite la CREATE PROCEDURE en ALTER PROCEDURE. Exécutez le script RedGate sur la base de données d'origine et vous avez supprimé tout le cryptage des procédures stockées.
J'avais une base de données avec plus de 400 procédures stockées et bien que l'invite SQL soit pratique, cela ne valait pas la peine de faire un clic droit, copier, coller contre plus de 400 procédures stockées. En utilisant RedGate SQL Compare, j'ai pu supprimer le chiffrement de mes 400+ procédures stockées en 10 minutes environ du début à la fin.