SQL Serverデータベーススキーマをあいまいにする方法はありますか?

SQL Server上のデータベースのスキーマを隠す方法はありますか?

クライアントサイトにSQL Server Expressがインストールされている場合、他のユーザーがスキーマやデータを隠してスキーマを学習してデータを他の製品に抽出できないようにする方法がありますか?

1
明らかにあなたは医療ソフトウェアなどを書いたことが一度もありません。競合する実装の侵入を防ぐヘルス・ベースの業界で働いています。
追加された 著者 William Mioch,
私はいつもこのようなことについて戸惑っています。なぜこれが許可されていないというソフトウェアの条件では十分ではないのでしょうか?
追加された 著者 Daniel James Bryars,
@Damien_The_Unbeliever:そうすることは商業的には意味がありませんか?私自身の設計で構造化されたデータは、誰にでも自由に公開できるのはなぜですか?
追加された 著者 CJ7,
@gbn:大企業が既にSQL Serverを実行している場合は、とにかくExpressは必要ありません。
追加された 著者 CJ7,
@gbn:SQL Server Expressの問題は何ですか? 2人の従業員を抱えるビジネス向けに製品をインストールしている場合、プロと幹事は、なぜそのビジネスはSQL Serverのライセンスを購入するだろうか?
追加された 著者 CJ7,
@ gbn:ビジネスの規模は問題ではありません。あなたはそれをあいまいにしたくなります。 SQL Serverを禁止するOracle専用店についてお聞かせください。
追加された 著者 CJ7,
@CraigJ - Damienのポイントは、あなたの時間(したがって、お金)が、顧客が望む機能をつくることに費やされ、顧客を欲しがっているあなたの商業的意味はお金を稼ぐものです。彼らが必要とする機能を持っている幸せな顧客は理にかなっています。それらを吐き出すと、競合他社にあなたがそれを行う間に新しい機能をさせることは理にかなっていません。
追加された 著者 cdeszaq,
このレベルのパラノイアを必要とするあなたは何を書いていますか?
追加された 著者 Nik,
私は投票するつもりはありませんが、最終的にはあなたのユーザーが自分のデータを所有していると思います。また、私は個人的に非常に不快感を感じるロックのレベルのアイデアを見つける。
追加された 著者 wcm,
経験から、クライアントがあなたの製品を所有することは、何かが間違っているときにそれを修正したり使用したりすることができないということを意味するなら、あなたはこれを覚えています。アップグレードに時間がかかった場合(または十分な問題が蓄積された場合)、クライアントはもうクライアントになりません。また、多くのクライアント、特に政府機関は、ロックインを防止するために、公開型(データ形式ではなく)のデータ形式とストレージを規定しています。なぜ、実際にそれを販売する機能に焦点を当てることができるのか。それ以外のものはおそらくあなたと契約しているはずです。
追加された 著者 dash,
@CraigJ:2人のビジネスのために無料の製品を稼働させるためにデータベースを不明瞭にする努力のトレードオフ?それは意味をなさない。大企業をターゲットにしている場合、SQL Server Expressを禁止するDBAが存在します。
追加された 著者 gbn,
@CraigJ:いいえ、私はそれを禁止するSQL Server DBAです。私はそれを禁止するいくつかの大きなMSショップを知っています。
追加された 著者 gbn,
@ダニエルジェームスブライアーズ:同意:すべてのライセンスが必要
追加された 著者 gbn,
スキーマが貴重な場合は、SQL Server Expressを使用しません。私は以前DBAとしてこれを禁止しました:あなたがそれをインストールしたいなら、私たちはあなたの製品を使用しません
追加された 著者 gbn,
開発者がより優れた製品に移行するのを防ぐために開発者が時間を費やしている、顧客が望む機能を開発するために開発者が時間を費やすような、 - それは悪循環です。
追加された 著者 Damien_The_Unbeliever,
うん、あなたのアップグレードパスにクライアントをロックするよりも良い方法はありません。彼らはそれを愛している。
追加された 著者 Damien_The_Unbeliever,
Ayendeが冗談を掲げたことを思い出させる。 ayende.com/blog/4048/nhibernate-get-あなたの私のデータベースのthou-out
追加された 著者 PhilB,

4 答え

データベーススキーマを隠すための最善の方法は、サーバーから離れないようにすることです。

スキーマを暗号化しても、キーをどこかに提供する必要があります。クライアントがそれを取得すると決定すると、キーと時間を費やすことになります。

だからあなたは、あなたの製品をサービスとして提供するか、または良い仕事をして顧客を忠実にする方が良いです。

10
追加された
オファー商品を「サービス」としてどういう意味ですか?月額料金のような意味ですか?
追加された 著者 CJ7,
+1これは実際にこれを達成するための唯一の方法であり、クライアントを一般的な泥棒のように扱うことを避けるためです。
追加された 著者 Andrew Barber,
@CraigJはい。あなたができない場合を除いて、できるだけ多くのコードをサーバーに残してください。好ましくは、シンクライアントによってアクセス可能である。顧客に毎月または毎年の料金を支払わせる。実際には、コードが安全であることを確認して、自分が行ったことに対してお金を払うことができる唯一の方法です。また、アップグレードがはるかに容易になります。あなたのアプリがファットクライアントの場合は、非常に重要な機能をサブスクライバ専用にして、サーバ上のネットワーク接続で利用できるようにしてください。この配布モデルは、ソフトウェアとしてのソフトウェア(SaaS)と呼ばれています。
追加された 著者 soulcheck,
あなたがそれを唯一の方法だと信じていないなら、Windowsクラッカーの前に置かれているMSとすべての障害と、それがどれだけ手に入るかを見てください。確かに、クラックされたWindowsに興味を持っている人が増えているように、他のパラメータもありますが、MSのクラッカーとあなたの会社のクラッカーと戦う人が増えています。一般的には、実際の開発を行うのに十分な時間を費やすことができます。
追加された 著者 soulcheck,

AFAIK、 "いいえ"。

データベースを「ロックダウン」するための最良の方法は次のとおりです。

1)適切なロールとユーザーでインストールします(理想的には、SQLロールとSQLユーザーは作成します)

2)SQL Serverでオブジェクトのアクセス許可を明示的に制限する

3)できるだけ多くのSQL Serverストアドプロシージャ(生のT-SQLではなく)を使用するようにアプリケーションをコーディングする

4)ストアドプロシージャを暗号化する

ここでは、「SQL Serverベストプラクティス」に関する興味深いリンクがあります。セキュリティ問題と(比較的)新しい機能「ユーザースキーマの分離」について説明します。

5
追加された
なぜストアドプロシージャを使用すると、スキーマがより曖昧になりますか?
追加された 著者 CJ7,
@CraigJ:生のSQLはログに記録できますが、ストアドプロシージャはアクセス許可で制御できます。あなたのアプリケーションのユーザーだけがそれらを実行したり、それらを見ることができます。
追加された 著者 cdeszaq,

方法があります、それは複雑で醜いですが、それは動作します。

他のテーブルのルックアップテーブルとして機能するマスターテーブルがあります。このマスター表は、次のように表示されます。

id、guid、entityname、parent_id

テーブル名とカラム名はすべてguidに変更されます。その後、それぞれのルックアップテーブルにエントリを入れます。データを選択したいときは、GUIDをルックアップテーブルから取り出してエンティティ名で引っ張って、隠しテーブルとカラム名を与えます。

そこには、これに非常に似た何かをする主要なソフトウェアベンダーがあります。

1
追加された
良いアイデアだが、おそらく私の状況のた​​めに少し徹底的。
追加された 著者 CJ7,
私はそれが劇的であることに同意する、私はあなたがそれをしてはならないことに同意する。
追加された 著者 dstarh,
@CraigJあなたの全体的なアイデアは正直なところ、「抜本的な」ものです。
追加された 著者 Andrew Barber,

これは難しいことであり、100%可能ではないかもしれません。しかし、それを設定するためのいくつかの秘訣があります:

  1. Install a new named instance of SQL server with a custom SA account (both name and password). There is an installation method for SQL server call "Unattended Installation" which allows you to specify all the installation parameters for SQL server in an ini file and then run the install silently. Check out the documentation here: Unattended Installation of SQL Server 2008 r2
  2. Create your database, tables, procedures, etc. with your magic SQL install script (use encrypted stored procs if you want, but they too are crackable)
  3. Add/Verify the schema permissions for the custom SA account and Drop all schema permissions for all Administrator roles. The goal here is that no roles have any schema permissions to your database and only your custom SA user has permission (not assigned by role, but directly to the user).

私が知っているいくつかの商用アプリケーションがありますが、MS SQL Expressのインスタンスをインストールしているとは言えません。彼らも名前付きSAアカウントで独自の名前付きインスタンスを作成します。私は顧客としてそれが好きだとは言えません(SQLはCPU上でヒットし、私のワークステーションでは「秘密」のインスタンスを実行したくないからです)。しかし、これを顧客に事前に開示する限り、彼らは理解するかもしれません。

**熟練したDBAには、システム・テーブルを混乱させる知識と、データベースへのアクセスを手動で許可しないことがあります。これらのテクニックは本当に単なる「難読化」であり、100%の弾丸証明ではありません。


As a side note: With the plethora of available 3rd party datalayers and webservice technologies, I think many companies are finding their database schema alone isn't so proprietary or valuable anymore. There was a time when the database schema alone could have represented hundreds of hours of coding. But today tools like EntityFramework, NHibernate, Linq-to-SQL, XPO, etc all create your database schema for you based on your software class definitions and in code attributes. So just seeing a DB table isn't really very valuable. Plus you might write a bunch of business logic, statistical analysis or other helper methods in your software that aren't in your database schema. In my opinion, this is where today's "value add" is found, in the business logic, analysis and reporting functionality of your software - not in the raw datatables.

これはまた、別のポスターがストアドプロシージャを難読化することを推奨していた理由です。なぜなら、いくつかの素敵な分析およびレポート手順が書かれていれば、データベーススキーマ自体の作業が何度もかかることがあるからです。また、顧客が独自のレポートニーズのためにカスタマイズする可能性が最も高いものもあります。貴社だけがカスタムレポートを行うことができるような方針をとる傾向があるかもしれません(ちょっと、SAPのような大企業でも誰が何を修正できるかが固いです)。

1
追加された
私はこの答えを授与しました。なぜなら、私が探しているような欲求不満を達成する最も賢明な方法だと思われるからです。
追加された 著者 CJ7,
しかし、Obsfucationは競合製品があなたの製品からデータを抽出するのを妨げる可能性があります。
追加された 著者 CJ7,