2


0

PostgresqlやMysqlのようなオープンソースデータベースに暗号化されたストアドプロシージャがないのはなぜですか?

それは彼らの生来のオープンソース哲学のせいでしょうか。

ストアドプロシージャを暗号化するための説得力のある理由は何ですか?

9 Answer


6


暗号化されたストアドプロシージャは少なくともPostgreSQLでのプログラミングの単純な問題であると確信していますが(MySQLとストアドプロシージャは長い歴史を一緒に持っていません)、PgSQLのカスタム言語サポートでは、なぜこれが役に立つのかわかりません。 データベース/データベースサーバを管理する人なら誰でも暗号化されていないspを手に入れることができるように、それらを実行するためにそれらを解読する必要があるでしょう。 DBAは、すべてのデータ、すべての関係をすでに確認できているため、SPコードの難読化は無意味です。


4


これが本当にクールな機能であるなら(私はそれを使ったことも、必要でもなかったことも)、私はあなたが新しいメーリングリストに新しい機能要求を登録することを勧めます。

Postgresql:http://www.postgresql.org/community/lists/

MySQL:http://lists.mysql.com/


4


誰もそれを必要としていなかったからです。


4


暗号化されたストアドプロシージャは明らかに悪い考えだからです。

ビジネスプログラミングは、SQLで書かれ、データベースに暗号化されて格納されているアプリケーションコード全体にのみアクセスできるDBAを中心にしてはいけません。 そのように狂気があります。


2


最も重要な理由は、オープンソースデータベースが本当に頭の良い人によって書かれているということです。 プロシージャを暗号化しても、不正な管理者がその暗号化されていないソースにアクセスするのを防ぐことはできません。

専有ソフトウェアの世界では、人々は「暗号化することで問題が解決する」と考える傾向があります。 しかし、あなたのデータベースのソースがオープンであるという事実を考えるとき、それは暗号化が本当に賢い方法で行われなければならないことを意味し、そしてすべての場合でうまくいくというわけではありません。

基本的に - あなたが「ディスクが盗まれること」からあなたのデータを保護したいならば、あなたはハードディスク暗号化を使うことができます。 バックアップを保護したい場合 - バックアップを暗号化します。 しかし、 "あまりにも興味をそそる"管理者を雇う弁護士からデータベースを保護したいのであれば、(多かれ少なかれ)データを隠すための不可能な方法を考えようとしないでください。


1


「ストアドプロシージャを暗号化する説得力のある理由」に答えるには私がこれを見たのは、アプリケーションがストアドプロシージャでかなり複雑な独自のロジックを使用していて、そのアプリケーションが顧客データベースシステムでホストされている場合です。

私はこれが完璧な解決策ではないことを知っています、しかしそれはコードを切り取るか、またはクライアントDBAが彼らが触れてはいけないものを変更するのを防ぐという些細な試みを止めます。


1


私がInterBaseのサポートを提供していたとき、この質問は時々起こります。 顧客がこの機能を望んだ理由は、「知的財産」への投資を保護するためです。 ソースコード - 商用ソフトウェアアプリケーションを開発するとき。

もちろん、C、Java、またはDelphiなどのコンパイルされた言語のソースコードへのアクセスを制限することができます。 顧客はコンパイルされたコードをリバースエンジニアリングしてあなたのアルゴリズムの何かを学ぶことができますが、それはソースコードにアクセスすることと同じではありません。 逆コンパイルで得られない情報はたくさんあります。

しかし、アプリケーションの一部をトリガやストアドプロシージャの本体に実装した場合、これらはソフトウェア製品を購入したすべての顧客にとって読みやすいままです。 このコードを隠したり暗号化したりする方法はあるかもしれませんが、元に戻すことのできない暗号化はできません。そうしないと、データベースエンジンでコードを実行できなくなります。

InterBaseは、トリガー/プロシージャソースのコピーをBLOBフィールドに保存し、同じルーチンのコンパイル済みバージョンを別のBLOBに保存しました。 そのため、ソースを含むBLOBフィールドをNULLにし、コンパイル済みコードをそのままにすることができます。 しかし、これはコンパイルされたアプリケーションコードを出荷するのと同じくらい効果的です。それはまだ十分なスキルと動機を持つ海賊によってリバースエンジニアリングすることができます。

MySQLまたはPostgreSQLでソースBLOBをNULLにするトリックが可能かどうかわかりません。

一番下の行は次のとおりです。

顧客に渡した後に、データベース内のデータまたはメタデータへのアクセスを絶対的に制限する方法はありません。

そしてこれは人為的な要件であることは注目に値します。 読み取り可能なコードがトリガーに含まれているために自分のソフトウェアのIPが盗まれた人のことを聞いたことがない とにかく必要ありません。 海賊はあなたのソフトウェアを複製するために他の手段を使うことができます。


1


これは、私見、ストアドプロシージャ/ビューを暗号化するための良いシナリオです。 私が働いている会社はデータベース駆動型アプリを書いています。 私たちは、データベースをSQL ServerまたはSQL Expressを実行しているワークステーション上のクライアントネットワークに収容します(ユーザーが少ない小規模のクライアントの場合)。 ストアドプロシージャとビューは、クライアントから提供されたデータを監査するために使用されます。 クライアントのDBAまたはITスタッフが単純に私たちを攻撃したり、独自のアルゴリズムを盗んだりするのを防ぐために、ストアドプロシージャとビューを暗号化します。 オリジナルのプレーンテキストのスクリプトをバージョン管理ソフトウェア(Visual Source Safeなど)で管理しているので、サポートチームが手順やビューのコーディング方法を確認することができます。 私たちがSQL Expressの限界から逃れることができるように、私はいくつかのオープンソースエンジンがそれをサポートすることを望みます。


1


(RE:太字)これはまったく正しいとは思わない。 あなたがACTを見たことがあるなら! 連絡先管理彼らはMSSQL Expressを別のインスタンスとしてインストールし、プライベートなユーザー名を使う データベースをクライアントと共有しない方法があります。

宗教的な戦争を始めるのではなく、MSSQLのようなdbサーバーはproc暗号化機能を持っています。 つまり、もしあなたがISVなら、あなたのIPを保護するために暗号化されたprocを使ってあなたのソリューションを展開することができます。 DBAとしてこれらのprocを暗号化解除することはできません。

私の2セント