2011-02-04 20 views
1

私のシニアデザインプロジェクトでは、たくさんのサブツールでiGoogleタイプのアプリケーションを作っています。アプリケーションはAJAXを多量に使用します。このため、いくつかの情報はクライアントに送信されるときにページに保存されるので、追加/削除などのときにツールに更新を加えることができます。SQL Serverの更新/挿入/削除の参加の質問

私の質問は、セキュリティに関するところです。データをクライアント側で改ざんできないようにして、ユーザーが他のユーザーのデータに影響を及ぼす可能性を排除します。

私がしたいことは、挿入/更新/削除ステートメントを作成するときにユーザーIDを確認して、ユーザーがデータを変更していることを確認することです。

これは、ユーザー・テーブルのユーザーIDを外部キーとして使用する最初の表には問題ありません。しかし、私はそこから分岐している他の多くのテーブルを持っています。

2つの個別のステートメント/クエリを実行せずに行う方法はありますか?私は選択結合を行うことができ、そのようなレコードが存在するかどうかを確認してから、更新/挿入/削除を実行することができます。 1つのステートメントで行うことは可能ですか?

SQL Serverでサブクエリを調べ始めました。サブクエリでこれを行うことはできますか?

これが愚かな質問であれば、私の無知を許してください。まだ学んでいる。ありがとう。

+0

私の悪意のあるデータに偽のユーザーIDを送信しないようにするにはどうすればよいですか? –

+0

私はあなたの質問がSQL Serverのデータを保護する方法についてのみ理解していますが、これは設計アーキテクチャの重要な部分です。はい、ストアドプロシージャを使用する必要があります。はい、実行中のユーザーが特定のデータを操作できるかどうかを判断するには、結合またはサブクエリーを使用できます。ただし、これらのルールや制約は、UIにも適用する必要があります。ユーザーとして、UI内のすべてのものを変更し、変更をコミットしようとしているとします。バックエンド(つまりSQL Server)は、あなたが修正しようとしているものを変更できないと言っているので、アプリはあなたに叫ぶ。ユーザーとして、時間を無駄にしてしまっただけです。 – bitxwise

答えて

0

1つのSQL文を使用できます。ユーザーIDをストアドプロシージャに渡してください。

はい、おそらく、挿入文でサブクエリを使用します。テーブル構造の例を挙げると、より具体的な答えを得ることができます。

セキュリティの面では(私はそれがあなたの質問の一部ではないことは分かっています)、あなたはどのようにクライアントとサーバーの間でユーザーIDを渡していますか?

+0

これは、データベーススキーマの旧バージョンですが、十分:https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0Bwy4qFl6LwWXNGQxODg4MGYtYzlmZS00MTZlLWIzNjctNGIxNjRiZWZmNzJj&hl=en – user603682

+0

ユーザーIDに関しては、私は(Membership.GetUserを使用していましたUser.Identity.Name).ProviderUserKey.ToString(); usersideを取得するserverside。 – user603682

+0

表示するドキュメントを取得できません。質問に画像を添付したり、2つのテーブルのスキーマを提供したりすることができます。ユーザーテーブルと更新しようとしている他のテーブル –

0

これはあなたが探しているものですか?

Select Table1.userId 
From Table1 
JOIN Table2 on Table1.usedId = table2.userId 
where table1.userId = @userId 

クエリがnullを返した場合、一致するレコードはtable2にあります。

+0

SELECT table.UserIdの "table"とは何ですか?そして、これは単に参加しているだけです。さらに、「クエリがnullを返した場合は、一致するレコードがtable2にあります」と言います。 「一致するレコードが見つかりません」という意味ですか?それでも、テーブルのレコードの更新/挿入/削除ではなく、結合のやり方に関する問題です。 –

+0

コードを編集します。私は 'Select Table1.UserId'を意味しません 'Select' table.UserId 'コードを編集します。おそらく、OPは更新を行う前にtable2に一致するuserIdがあるかどうかを調べようとしていたと私は考えました。 – Ali

関連する問題