1

私は現在、小さな公開 Web サイト (ユーザーがログインして個人情報を変更できるサイト) を作成している最中ですが、データベースのセキュリティが実際にどのように設計されているのか疑問に思っているので、いくつかの質問。

たとえば、インターネット ユーザーが (サイトにログインせずに) stackoverflow のようなページにアクセスする場合、投稿されたすべての質問を表示できるようにするには、どのデータベース ユーザーまたはロールにログオンしますか? 次に、ユーザーが自分のアカウントでログインすると、データベース内での役割は変わりますか (権限が増えるため)?

データベースに「Users」テーブルと「Permissions」テーブルを設定すると、少なくともアプリケーション側では、ユーザーが自分のデータにのみアクセスできるようになります。しかし、すべてのパブリックユーザーが同じ「データベースログイン」または「ロール」を持っていると思うので、データがまだデータベース側で保護されていることを確認するにはどうすればよいですか?

私の質問がおそらく少し不明確であることは承知していますが、遠慮なく私に説明を求めてください。どこから始めればいいのか本当にわかりませんでした。

ありがとう。

PS: 現在 SQL Server を使用しています

4

4 に答える 4

0

あなたはほとんどあなた自身の質問に答えました。

一般に、あなたのウェブサイトはあるユーザー アカウントで実行されます。これを 'IWEB' と呼びましょう。このユーザー アカウントは、ユーザーがあなたのウェブサイトにログインしているかどうかに関係なく、あなたのウェブサイトにアクセスするすべての人にとって同じです。

IWEB には、データベースからデータを読み取る権限があります。それが匿名ユーザーの仕組みです。

データベースには、ユーザー テーブル、場合によっては権限テーブルがあります。IWEB には、新しいユーザーを作成し、ユーザーを更新するためのデータベース権限が与えられます。ユーザーの削除が妨げられる可能性があります。

アプリケーションは (IWEB を使用して) これらのテーブルを使用して、誰がアプリケーションにアクセスできるか、誰が何を更新できるかを制御します。アプリケーションのバグ (SQL インジェクションなど) により、悪意のあるユーザーが管理者アカウントを作成したり、他のユーザーのパスワードを変更したりできる可能性があります...

Windows 認証を使用するなどの特定のシナリオでは、サイトにログインしているユーザーをパススルーし、それをデータベース ユーザーに変換して権限を与えることができます。ただし、一般向けの Web サイトでこれを行うことはほとんどありません。

テーブルに直接アクセスせず、ストアド プロシージャを介して制御し、基になるテーブルへのアクセスを拒否するようなことを行うことができます。パラメータの 1 つは現在ログインしているユーザーで、データベース層でアクセスを制御できます (ユーザーが別のユーザー プロファイルを更新するのを防ぎます)。もちろん、アプリケーションにバグがあり、攻撃者が現在ログインしているユーザーを変更できる場合を除きます。

それはすべて、セキュリティ要件によって異なります。ただし、主に、アプリケーションでアクセスを制御します。

于 2013-08-29T11:59:14.680 に答える
0

最初の質問: ユーザーが最初に Web ページにアクセスしたとき、ユーザーには「役割」がありません。スクリプトによって、ユーザーが表示できるものと表示できないものが決まります。

たとえば、特定のユーザーのみが表示できる投稿があるとします。その投稿はデフォルトで非表示になります。次に、スクリプトでテストを実行して、ユーザーが現在ログインしているかどうか、およびそのユーザーがその投稿を表示する権限グループに属しているかどうかを確認する必要があります。そうである場合は、投稿を表示します。

どちらの方法でもデータベースにアクセスできないようにする必要があります。

于 2013-08-29T11:44:25.417 に答える
0

Users テーブルに Anonymous ユーザーがいて、Permissions テーブルに最も低い権限があることの何が問題なのですか?

于 2013-08-29T11:39:11.847 に答える