3

SQL Server でアプリケーション ロールを使用することを考えています。Microsoft MSDN サイトで以下を読みました: http://msdn.microsoft.com/en-us/library/ms190998.aspx

アプリケーション ロールとの接続 次の手順は、アプリケーション ロールがセキュリティ コンテキストを切り替えるプロセスを構成します。

ユーザーがクライアント アプリケーションを実行します。

クライアント アプリケーションは、ユーザーとして SQL Server のインスタンスに接続します。

次に、アプリケーションは、アプリケーションだけが知っているパスワードを使用して、sp_setapprole ストアド プロシージャを実行します。

アプリケーション ロール名とパスワードが有効な場合、アプリケーション ロールは有効になります。

この時点で、接続はユーザーの権限を失い、アプリケーション ロールの権限を引き受けます。

アプリケーションがパスワードを知る必要がある場合、これを達成する最善の方法は何なのかと思います。パスワードをソースコードに保存することはセキュリティ上のリスクであると思います。アプリケーションでパスワードを展開する別の安全な方法はありますか (これは、ユーザー マシンに展開される Windows クライアント アプリケーションであることに注意してください)。

4

2 に答える 2

2

実際には、アプリケーションでパスワードを展開する別の方法があります。

パスワードをシークレットとしてデータベース自体に保存できます。

たとえば、この「シークレット」を返すストアド プロシージャまたはスカラー関数を使用します。これは、説明したロジックの追加のステップであり、ユーザー資格情報を使用してアプリケーションによって接続が確立された直後に実行されます。

いずれにせよ、ユーザーは Windows 認証を使用してデータベースにアクセスできるため、これが可能です。データベースとプログラマブル オブジェクトのみに接続するためのアクセス権がユーザーに付与されるように、パーミッションを設定する必要があります。

パスワードを「難読化」(安全ではない) するには、暗号化されたバージョンをデータベースに保存し、単純な暗号化/復号化 (このようなもの) を使用できます。

このアプローチには、次の利点があります。

  • パスワードは平文でどこにも保存されません (ただし、SSL 暗号化を使用しない場合、パスワードは平文でネットワーク上を移動することに注意してください)。
  • アプリケーションのユーザーは、入力を提供する必要はありません
  • アプリケーションのソース コードにパスワードが含まれていない
  • アプリケーションの展開にはパスワードが含まれていません
  • パスワードは、たとえばスケジュールに従って、非常に簡単にリセットできます
于 2014-01-13T18:03:49.297 に答える
0

There is no way to deploy a password on a user workstation w/o a local administrator being able to discover it. You can only raise the bar so high, but if the price is worth it they will find it.

You should rely on the user providing the password, which ultimately boils down to using Windows authentication instead, if possible. You should always assume that whatever privileges the application has, the user has them as well and he/she can exercise them using an alternative access API (ie. any query tool). If you cannot trust the user with certain privileges, then you must not deploy the application on his/her computer. For example use a multi-tier solution that isolates the database from the user and add any necessary validation in this intermediate tier (most ASP.Net and/or WCF apps would qualify as such multi-tier when done properly).

于 2013-05-28T08:35:45.620 に答える