私はサードパーティのデータベースに取り組んでいます。
右クリックしてビューの定義を表示しようとすると、CREATE TO
、次にNEW QUERY EDIT WINDOW
、エラーが発生します:
このプロパティはこのオブジェクトに存在しないか、アクセス権が不十分なために取得できない可能性があります。テキストは暗号化されています。
暗号化されたオブジェクトをその場で解読するために使用できる別のサードパーティツールは、Red GateのSQLプロンプトです。 http://www.red-gate.com/products/sql-development/sql-Prompt/features
ストアドプロシージャにカーソルを合わせると、復号化された作成スクリプトが表示されます。
免責事項:このツールは商用で(14日間の無料トライアル付き)、Red Gateで働いています。
この問題についてかなり詳しい説明があります ここ 。
つまり、オブジェクトは実際には暗号化されておらず、難読化されています。したがって、元の状態に戻すことができます。この方法は少し複雑ですが、次の手順で構成されています。
次のような難読化されたコードを選択します。
SELECT @secret = imageval
FROM sys.sysobjvalues
WHERE objid = OBJECT_ID(@object_name);
オブジェクトを同じ名前の同じobject_idと同じ長さ(バイト単位)を持つ別のオブジェクトに置き換えます(例:ALTER PROCEDURE
)
これで元のコードが得られます。ただし、Kinが述べたように、これを行うことにはサポートがあり、法的な影響さえあるので、まず弁護士に相談してください。
モジュールテキストは、RC4ストリーム暗号を使用して暗号化されます。
RC4初期化キーは、次のSHA-1ハッシュから計算されます。
モジュールのオブジェクトサブIDは次のとおりです。
適切な特権を持つユーザーは、次の方法でモジュールを復号化できます。
私の記事の詳細と完全なコード実装:
専用管理者接続(DAC) を使用してSQL Serverに接続し、ストアドプロシージャのSQLテキストを表示できます。以下を使用してDACに接続します。
admin:Your_Servername
必要な完全な手順は、 Stack Overflow の Martin Smith の この回答で確認できます。
もう1つの方法は、[////] SQL Server 2005、2008、およびR2 の暗号化されたストアドプロシージャ、ビュー、関数の復号化で説明されているように、サードパーティのスクリプトを使用することです。
補足として-それがサードパーティのデータベースであり、製品でそれを行う場合、ベンダーはそれをサポートしますか? SPまたはビューを暗号化するのに十分な理由がある場合があります。おそらく、バックアップを取り、それをいじるのが良いでしょう。
元のDDLスクリプトをプレビューするか、暗号化されたオブジェクトを復号化する場合は、チェックアウトできます ApexSQL Decrypt
これは無料のスタンドアロンツールで、SSMSに統合したり、元のDDLスクリプトをプレビューしたりできます。また、複数のサーバーにあるオブジェクトを一度に復号化できます。あなたを助けることができるもう1つのツールは dbForge SQL Decryptor です。
一度に複数のストアドプロシージャを復号化するためによく使用する方法...
RedGateのSQL Compareを使用して、データベースを空のデータベース(または、ストアドプロシージャがないことがわかっているデータベース)と比較します。デプロイスクリプトを作成し、SSMSにコピーします。検索してWITH ENCRYPTIONを空白で置き換えます。次に、CREATE PROCEDUREをALTER PROCEDUREに変更します。元のデータベースに対してRedGateスクリプトを実行し、ストアドプロシージャの暗号化をすべて削除しました。
400以上のストアドプロシージャを含むデータベースがあり、SQLプロンプトは便利ですが、400以上のストアドプロシージャに対して右クリック、コピー、貼り付けをする価値はありませんでした。 RedGate SQL Compareを使用して、400以上のストアドプロシージャから約10分で暗号化を解除できました。