web-dev-qa-db-fra.com

Comment afficher une vue cryptée ou une procédure stockée

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é.

27
goofyui

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.

12
michristofides

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:

  1. Connectez-vous à l'instance à l'aide de la Connexion Admin Dédiée
  2. Sélectionnez le code obscurci comme ceci:

    SELECT @secret = imageval
    FROM   sys.sysobjvalues
    WHERE  objid = OBJECT_ID(@object_name);
    
  3. 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)

  4. Obtenez le code nouvellement obscurci de la même manière que ci-dessus
  5. XOR les trois valeurs ensemble (original obscurci, remplacement et remplacement obscurci)

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.

18
Sebastian Meine

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:

  • GUID de la famille de bases de données (de sys.database_recovery_status)
    Converti de uniqueidentifier à binaire (16)
  • L'ID d'objet du module (à partir des vues de catalogue)
    Converti de entier en petit-boutien binaire (4)
  • Sous-ID d'objet du module
    Converti de smallint à little-endian binary (2).

Le sous-ID d'objet du module est:

  • 1 pour une procédure stockée non numérotée; ou
  • Numéro de procédure pour une procédure stockée numérotée (obsolète); ou
  • 0 sinon.

Un utilisateur convenablement privilégié peut ensuite déchiffrer le module en:

  1. Obtention du binaire chiffré depuis sys.sysobjvalues (en utilisant le DAC)
  2. Calcul de la clé RC4 comme détaillé ci-dessus
  3. Exécution de l'algorithme RC4 standard bien connu sur le binaire
  4. Conversion du résultat du binaire en nvarchar (max)

Plus de détails et une implémentation complète du code dans mon article:

Les internes de WITH ENCRYPTION

14
Paul White 9

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.

12
Kin Shah

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

8
McRobert

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.

0
Aaron Hurst