は、RESTfulなWebアプリケーションで使用する場合、ID列がデフォルト以外のシード/増分を持っているオートインクリメントすべきか?
背景
私は私の最初のASP.NET MVCアプリケーションでの作業とRESTful私のURLを維持しようとしています。アプリケーションの管理Webサイトは別個にありません。私は属性を使用して、サイト内のどの部分にアクセスできるのか、現在のユーザーがシステム内の役割に基づいてどのメニュー項目を表示できるのかを制御します。私は(ほとんど)ActiveRecordのDBパターンに従い、idが自動生成されたID列であるuserテーブルを含め、私のテーブルに合成IDを使用します。
RESTfulアプリケーションのID列にデフォルトのシードを使用することには、微妙なセキュリティリスクがありました。管理ID(特に最も強力なもの)がアプリケーション内で最初に作成されると仮定すると、システム内のID番号が最も低くなります。実際にアプリケーションで穴を開けていない間に、シード/インクリメントにデフォルト値を使用すると、RESTfulなアクション(ChangePasswordなど)を使用して低い番号のIDをターゲットにするだけで、クラッカーが高価値のターゲットを攻撃しやすくなります。 ASP.NET MVCサイトテンプレートのすぐに使用できるアクション)。
セキュリティベストプラクティスのベストプラクティスに、デフォルトではないシードを、少なくとも私のユーザーテーブルに追加する必要がありますか?それに価値があることの効果はありますか?それとも、私はあまりにも過敏症ですか?関連する質問として、私はアカウント関連のアクションのテンプレートテンプレート名を変更する必要があります。
これに同意します。いくつかの利点があります。一意のIDを取得するためにDBにヒットするのを待つ必要はありません。生成することができ、必要に応じてキューに入れることができます。これらを64のベースにして、URLのクエリパラメータとして使用できる25文字の文字列として渡すことができます。 – JohnOpincar
ありがとうジョン。また、オフライン作業や同期などにIDを使用するなど、さらに多くの利点があります。GUID PKには多くの利点があります(通常のintの4倍の大きさやデバッグのための覚えがないなどの欠点があります)テスト)。 – Lucero
私はほとんどのDBの4倍のサイズの増加を処理することができます賭けるだろう。私はDBの最大のものを除いて、これが大きなインパクトはないと考えています。 – JoshBerke