SQL Server Express 2008 で C# を使用して会計アプリケーションを開発しています。アプリケーションはデータベースにローカルでのみアクセスします。アプリケーションをインストールするときに顧客にユーザー名とパスワードを入力してもらいたいのですが、そうすれば、アプリケーションを実行できるのは顧客だけです。私の質問は次のとおり
です。1.ログイン資格情報をローカルファイルに保存する必要がありますか、またはそれらの資格情報を使用して SQL Server ユーザー アカウントを作成し、それらを秘密に保つデータベースに依存しますか?
2. 2 番目のオプションが実行可能な場合、インストーラ パッケージから実行する方法を教えてください。
2 に答える
たとえば、IP、ポート、ユーザー名、パスワードなどのデータベース設定を XML ファイルにローカルに保存し、プログラムのログイン資格情報をデータベースに保存することができます。
注: もちろん、あなたがセキュリティについてどれだけ知っているかはわかりませんが、ここにいくつかのヒントがあります。
1) パスワードをデータベースに直接保存しないでください。ハッシュと何らかの暗号化方法を使用します。2)ユーザーがログインしようとする特定のパスワードのハッシュを、プログラム用に作成したデータベースに格納された変数で確認します。これもハッシュである必要があります。
基本的に、データベースは実際のパスワードが何であるかを知る必要はありません。渡された特定のハッシュのみであり、プログラム自体で比較できます。
データベースへのアクセスに関しては、必要なスキーマのみにアクセスできるユーザーを作成します。そこから、アプリケーション/プログラムにログインしているユーザーを取得して、XML ファイルなどの資格情報を使用してデータベースにログインします。これらの詳細を XML ファイルでも暗号化して、ローカルで改ざんできないようにすることも考えられます。
これには他にもたくさんあります。SQL Server をインストールしたユーザーが SQL Server セキュリティを選択した場合、そのユーザー (sa) が定義され、すべてにアクセスできます。
Windowsのみの場合、SQLサーバーをインストールしたのはWindowsユーザーであり、すべてにアクセスできます
混合の場合、両方がすべてにアクセスできます
次に、サーバー上でデータベースを作成したユーザーは、デフォルトで dbo になり、データベースへのフル アクセスを持ちます。
だから、それは誰が何をしているかにかかっています。
アプリのインストーラーは SQL サーバーのインストールを呼び出しますか? データベースを作成しますか?
管理者と dbo はどちらも、上記のデータベースへのアクセスを好きな人に許可できます。
アプリをインストールする Windows ユーザーを追加するには、インストーラーに 1 つまたは 2 つの SQL コマンドを実行させるだけです。その時点で、シングル サインオンができます。Windows ユーザーを追加し、それらをデータベース ロール/ユーザーにマッピングするためのパスワードは必要ありません。
ユーザーが知っていれば誰でも使用できるユーザー名とパスワードが必要な場合は、おそらくSQLのみ/混合モードが最適です。ここでも、選択したインストーラーからいくつかの SQL コマンドを実行して、ユーザーの fred パスワードを変更しましたか?, ジョブは完了しました.
覚えておくべき点は、ログインとユーザー、ロールなどを追加する手順を実行するには、それを行う権限を持つ他のユーザーとして接続する必要があることです。たとえば、windows admin または sa.
また、管理されたネットワークのほとんどのアプリケーション ユーザーは管理者権限を持っていないため、それも少し楽しむことができます。
SQL Server のセキュリティについて読んだことをお勧めします。この猫の皮を剥ぐ方法はいくつかありますが、最適なオプションを選択するのに十分な情報を持っているだけです。
アプリケーションのインストールごとに独自のデータベースとロールが作成される場合は、アプリケーション ベースのセキュリティについて考えることもできます。