現在、ユーザーのWindowsアカウントをSQLサーバーにnvarchar(10)として保存していますが、これはユーザーIDを保存する正しい方法ですか?データ型はどうあるべきですか?または、ユーザーIDを保存する必要がありますか?
5 に答える
Windows NTのユーザーIDは、セキュリティ識別子であるSIDと呼ばれます。文字列表現はSID文字列フォーマット構文で指定され、マーシャル表現はSID--パケット表現で指定されます。SIDをデータベースに保存する場合は、フィールドと同じ表現varbinary(85)を使用します。ログインSIDを取得するには、(これも...を返します)を使用します。sys.databases.owner_sid
SUSER_SID
varbinary(85)
特に大企業では、IDが予想よりも頻繁に変更されるため、IDをログイン名(または)として保存しないでください。鉱山は10年間で約5回交換されました。domain\user
user@domain
これは非常に複雑な質問です。
技術的には名前を保存しないでください。ちなみにタイプ別のGUIDであるIDを保存します。
これは、たとえばアカウントの名前を変更するときに安全であることを意味し、それがWINDOWSが行うことです。ファイルの権利を開くときに名前を表示するのに1秒かかるのを見たことがありますか?そして、最初に数字を表示しますか?これは、Windowsがドメインコントローラーから名前を取得するのに少し時間がかかるためです。
SIMPLEはアカウント名を保存することですが、それはあなたが名前の変更で「死んでいる」ことを意味します。私はほとんどの解決策がそのために行くと思います;)
または、ユーザーIDを保存する必要があります
で新しいアカウントを作成している間Stack overflow
。Google/Facebook or Yahoo
を使用することを意味するユーザーIDを受け入れますPassport Authentication
。ただし、クエリ/応答/コメント/フラグなどの関係については、データベースにユーザー情報を保持します。
データ型はどうあるべきですか?
まあ、それはあなたの要件に依存します。英語以外の言語の場合。それは違いないNVarchar(50)
現在のユーザーIDを取得する場合(ここをチェック)、char(30)
が使用されます。
したがって、少なくとも、長さを30に変更する必要があります。
userid
データベース内の別のテーブルからのIDであるかどうかは、データのタイプによって異なります。次に、データタイプに従って親テーブルに保存します。WindowsのユーザーIDの場合は、nvarcharとして保存しますが、logestユーザーIDが収容されていることを確認してください。nvarchar(50)のように