目前我在sql server中将用户的Windows帐户存储为nvarchar(10),这是存储用户ID的正确方法吗?应该是什么数据类型?或者我应该存储用户ID?
答案 0 :(得分:11)
Windows NT用户身份称为 SID ,security-identifier。它的字符串表示在SID String Format Syntax中指定,编组表示在SID--Packet Representation中指定。如果要在数据库中存储SID,请使用与sys.databases.owner_sid
字段相同的表示形式: varbinary(85)。要检索登录SID,请使用SUSER_SID
(也返回... varbinary(85)
)。
特别是不将身份存储为登录名(domain\user
或user@domain
),因为这些更改方式比您预期的更频繁,特别是大公司。我10年后改变了5次。
答案 1 :(得分:2)
这是一个非常复杂的问题。
技术上不要存储名称。存储ID,无论如何它依次是GUID。
这意味着当您重命名帐户时这是安全的,这就是WINDOWS所做的。有没有看到当你打开文件的权限时,需要一秒钟来显示名称?并先显示一个数字?这是因为windows需要一点点来从域控制器获取名称。
SIMPLE是存储帐户名称,但这意味着你在重命名时“死了”,这应该是非常快的,otoh。我认为大多数解决方案都适用于此;)
答案 2 :(得分:1)
获取当前用户ID(选中HERE)时,会使用char(30)
。
所以,至少,您应该将长度更改为30!
答案 3 :(得分:1)
如果它是来自您数据库的另一个表的id,则取决于userid
中的数据类型,然后根据parant表中的数据类型保存它。如果是windows userid然后将其保存为nvarchar,但要确保容纳logest userid。比如nvarchar(50)
答案 4 :(得分:1)
或者我应该存储用户ID
在Stack overflow
中创建新帐户时。它接受Google/Facebook or Yahoo
个用户ID,表示它使用Passport Authentication
。但它仍然将用户信息保存在数据库中,以便查询/回复/评论/标记等之间的关系。
数据类型应该是什么?
嗯,这取决于你的要求。如果是非英语语言。必须是NVarchar(50)