0

こんにちは、私は現在、c# xna を使用してゲームを作成しており、ユーザーが何らかのプロファイル システムを使用できるようにする予定です。アカウントの作成、サインイン、プロフィールの表示、実績などを行うことができます。

これをテストしている間、SQL Server Express のローカル インスタンスを使用しています。テストではこれで問題ありませんが、完成品を作成するときは、接続文字列を変更してリモートのパブリックにアクセス可能な SQL サーバーに接続するだけで問題ありません。そうしないと、セキュリティに影響します。

たとえば、誰かがプログラムを介して SQL サーバーのユーザー名/パスワードを見つけ出し、手動で接続して大混乱を招く可能性はありますか?

代わりに、クライアント側プログラムに代わってデータベースにクエリを実行するサーバー側アプリケーションに接続して、クライアント側がデータベースに直接アクセスするのを防ぐ必要がありますか、それとも不要な抽象化ですか?

4

2 に答える 2

1

セキュリティ上の懸念から、プログラムをデータベースに直接接続するよりも、サーバー側のアプリケーションに接続する方が最適です。

第 1 に、SQL Server を公共のインターネットに公開することは、多くのリモート エクスプロイトが行われているため、一般的にセキュリティが低いと見なされます。

第 2 に、一般に、各ユーザーのデータベース アクセスを制限することは困難であるか、実行不可能です。通常、個々のデータベース アカウントを作成することは実用的ではないため、すべてのユーザーがデータベースに接続するために 1 つのアカウントが使用されます。この単一のアカウントは、必要な機能を実行するためにデータベースへの多数のアクセスを必要とします。つまり、データベースに対して任意の悪意のあるクエリを実行するためにも使用される可能性があります。1つの穏やかな可能性はUPDATE highscores SET score = 1000000000 WHERE user_id = <my user id>. すべてのユーザーにデフォルトのデータベース管理者のユーザー名とパスワードを使用して実装され、ネットワーク経由でプレーンテキストで送信されるいくつかの学校管理システムを見てきました。これらは公開されていないため、わずかに改善されました。

これに関連する追加の質問は次のとおりです。

于 2013-04-15T05:10:48.620 に答える
0

Microsoft 管理コンソールを使用して SQL Server のインスタンスの SSL 暗号化を有効にする方法

接続文字列 (SQL Server 2012):

Provider=SQLNCLI11;Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;
Encrypt=yes;

接続文字列 (SQL Server 2008):

Provider=SQLNCLI10;Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;
Encrypt=yes;
于 2013-04-15T00:17:36.893 に答える