アプリケーションでaspメンバーシップを使用します。
テーブルを追加しましたが、 (asp メンバーシップの)UserProfile
への外部キーがあります。ユーザー名は電子メールであり、一意であるため
、外部キーとして使用します。そして、外部キーとして
使用するユーザーを参照する必要がある場所ならどこでも。
たとえば、プロファイルを取得する必要がある場合は、アプリケーションからストアド プロシージャに渡してデータを取得します。
これがこれを行う良い方法かどうかは疑問です。ここに潜在的なセキュリティ上の問題はありますか?Users
Username
Username
Username
3 に答える
ここで私が目にする主な問題は、外部キーに多くの「データスペース」を費やしていることです。これにより、速度が低下し、テーブルのデータベーススペースが消費されます。また、データベーステーブルは接続して文字列を比較します-データベースはこの文字列を処理してハッシュを作成し、背後には数値を比較しますが、それには少しオーバーヘッドがあります。
UserNameを一意にし、数値外部キーを使用して残りのテーブルに接続するだけです。
ここでの2番目の問題は、ユーザーがメールを変更する必要がある場合、または何らかの理由で間違ったメールを送信する必要がある場合です。この場合、データベース上のすべての接続を更新し、他の同様の電子メールがないことを確認する必要があります。
また、もう1つの問題は、電子メールと外部キーで大文字と小文字が区別されるかどうかです。何らかの理由で大文字と小文字を区別する場合は、混乱を招きます。
セキュリティの問題については、常にパラメータを使用してデータベースを開いて確認する必要があります。これは数字キーでも文字列キーでも同じなので、この場合も違いはありません。
多くのシステムでは、ユーザーが自分のユーザー名を変更できるようになっています。あなたの場合、これをメールアドレスにリンクします。これは、ユーザーが変更できるようにする必要があります。
それを外部キーとして使用する場合、データの同期を維持するために更新を実行する必要がありますが、これは悪いことです。
これは、古い自然対代理の重要な議論です。どちらのアプローチにも「ファン」がいますが、単純な真実は、どちらにも長所と短所があり、特定の状況に最も適した独自の決定を下す必要があるということです。
PKとしての電子メールの特定のケースについては、このディスカッションを参照することをお勧めします。