2011-08-09 11 views
0

唯一のサーバーコンポーネントがデータベース(アプリケーションサーバーなし)であるクライアントサーバーアプリケーションのライセンスシステムを開発中です。他のサーバーにインストールできない、またはバックアップ/復元を介して転送できない特定のサーバーに対してライセンスを発行したいと考えています。この考え方は、T-SQLクエリを介してユニーク識別子を生成し、パブリック/プライベート署名を使用して、その識別子に対してのみ動作するアクティベーショントークンを返すことです。T-SQLを使用してSQL Serverコンピュータを一意に識別

T-SQL(CLRストアドプロシージャまたは関数なし)のみを使用して、繰り返し可能な方法でSQL Serverを一意に識別する方法はありますか?たとえば、インスタンスのインストール時に取得される、取得可能な一意の値がありますか?

を編集してください:NEWSEQUENTIALID()のMAC部分が機能するかどうかを確認してください(this methodを参照)。クラスター/フェイルオーバーのセットアップでシステムがフェイルオーバーした場合、または1次LANアダプターが変更された場合、新しいハードウェアで再活動化されるまで「猶予期間」に入ることがあります。問題は、これが「十分にユニーク」なのかどうかです。

+1

クラスタ/フェイルオーバーについて忘れないでください。マシンとデータベースの間に必ずしも1:1があるわけではありません –

+0

確かに、良い点です。クラスタまたはフェールオーバーの設定のすべてのインスタンスで同じIDが返されるのが最善の方法です。 –

+2

一意のハードウェア情報がSQL Serverに直接公開されていないので、任意の答えが 'xp_cmdshell'を必要とすると思います。 – JNK

答えて

-2

一意のIDを取得しても、潜在的な問題はT-SQLでの検証です。データベースは検証されません。彼らがT-SQLをハックして起動部分を削除するとどうなりますか?顧客はT-SQLを直接使用するか、クライアントアプリケーションを持っていますか?クライアントアプリケーションがある場合、CLRはオプションではありません。クラック可能でしたが、インストール時にサーバー名のハッシュを生成し、データベースに格納したアプリケーションで作業しました。次に、クライアントは格納されたハッシュと動的ハッシュを比較して、別のサーバー上にあるかどうかを判断します。サーバー名が同じで、ハッシュアルゴリズムがクライアントアプリケーション上にあったため、公開する可能性がありました。

Adian質問にお答えいただきありがとうございます。

sysObjectsやその他のシステムテーブル/ビューを見ると、サーバとデータベースを一意に識別できるものが見つかると思います。別のサーバーに復元する場合と同じように、ユーザーを削除して、名前が同じであってもユーザーを再作成する必要があります。内部IDは異なります。彼らがマスターとアプリケーションのデータベースを復元した場合、すべてを同一にすることができるかもしれませんが、そのことを知る必要があります。基本インストールでは、SQLは、Microsoftが複製、他の機能、およびライセンスのために一意のIDを必要としていることを意味するので、どこか一意のIDを生成する可能性があります。

+1

これは答えがわかりませんか? – JNK

+0

@JNKはい、答えです。 1つのオプションは、サーバー名のハッシュと共にサーバー名をデータベース上の表に書き込むインストール時です。次に、クライアントは独立してハッシュを作成し、それをデータベース上のハッシュと比較することができます。このソリューションには欠陥があると指摘していますが、それはまだ解決策です。下投票の基準は、「あなたがひどくやっかいで無駄に費やされた投稿に出くわしたとき、または明らかに、おそらく危険に間違っているときは、投票してください!私の答えはどのように投票を正当化するのですか?これはどうして危険なのですか? – Paparazzi

+0

いくつかのことがあります。 ** 1 ** - ダウンボートは「役に立たない」回答です。私はこれが資格を与えると思う。元のインストールと一致するようにサーバー名を変更し、ハッシュをバイパスすることは簡単です。 ** 2 ** - 前にdownvoteを適用しませんでしたが、私は今です。乾杯! – JNK

関連する問題