web-dev-qa-db-ja.com

ASP.NET MVCを介したデータアクセス用のSQL ServerでActive Directory ObjectSidを主キーとして使用する

ASP.NET MVC C#/ MS SQL Serverを使用して、イントラネットの従業員報酬Webアプリを設計しています。これは、ネットワーク内からのみアクセスされます。

従業員とマネージャーは、よくできた仕事や特定の従業員が感謝する日のために他の従業員に報酬を与えることができます。合計約1000人の従業員。

別のユーザー/ pwを必要としないようにしたいので、Windows認証を使用しています。

リワードトランザクションに関するデータを操作/保存するには、個別のSQL dbが必要です。

私の計画は、すべての従業員をActive DirectoryからSQL Serverにインポートし、SQL側の従業員の主キーとしてObjectSidを使用することです。このObjectSidは、従業員が新しいドメインに移動しない限り変更されないことを理解しています(現時点ではほとんどありません)。それは次のようになります-

Employee: 
ObjectSID - PK
username - from Windows AD
firstName
lastName
etc. 

他のテーブルで報酬トランザクション、従業員の残高などを追跡します。

彼らがアプリにアクセスするとき、私は私のビューでWindowsユーザー名をつかむことができます

@HttpContext.Current.User.Identity.Name. 

次に、そのユーザー名を使用してEmployee.usernameと照合し、ObjectSID(PK)を返し、それを一意のIDとして使用して、アクティビティをアプリに保存します。

その計画であなたに飛びつく大きなハングアップはありますか?

結局のところ、従業員の名前の変更(結婚)があったときにデータのメンテナンスを行う必要がありますが、その頻度は非常に低いため、大きな問題とは考えていません。

これに異なる方法でアプローチする方法についての考えやアイデアはありがたいです。

ありがとう。

4
FreeMars

あなたの質問は以前ここで回答されたようです: https://stackoverflow.com/questions/1628595/storing-a-windows-sid-in-a-database-for-lookup

そうは言っても、私はそのスレッドでのアドバイスに同意しません。企業が合併するかどうかは、それがテイクオーバーであろうとテイクオーバーであろうとです。

フォレストが適切にスコープされていると仮定して一意性を保証するため、フォレスト情報とSIDを保存することをお勧めします: https://social.technet.Microsoft.com/wiki/contents/articles/34981.active-directory- best-practices-for-internal-domain-and-network-names.aspx

1
John Zabroski