Sql server 如何在数据库中存储windows用户ID?
目前我正在sql server中将用户的windows帐户存储为nvarchar(10),这是存储用户ID的正确方法吗?数据类型应该是什么?或者我应该存储用户ID吗 这是一个非常复杂的问题 从技术上讲,不要存储该名称。存储ID,顺便说一句,它是按类型划分的GUID 这意味着您在重命名帐户时是安全的,WINDOWS就是这么做的。有没有见过当你打开一个文件的权限时,它需要一秒钟来显示名称?先显示一个数字?这是因为windows需要一点时间才能从域控制器获取名称Sql server 如何在数据库中存储windows用户ID?,sql-server,sql-server-2008,sqldatatypes,userid,Sql Server,Sql Server 2008,Sqldatatypes,Userid,目前我正在sql server中将用户的windows帐户存储为nvarchar(10),这是存储用户ID的正确方法吗?数据类型应该是什么?或者我应该存储用户ID吗 这是一个非常复杂的问题 从技术上讲,不要存储该名称。存储ID,顺便说一句,它是按类型划分的GUID 这意味着您在重命名帐户时是安全的,WINDOWS就是这么做的。有没有见过当你打开一个文件的权限时,它需要一秒钟来显示名称?先显示一个数字?这是因为windows需要一点时间才能从域控制器获取名称 简单的方法是存储帐户名,但这意味着您在
简单的方法是存储帐户名,但这意味着您在重命名时“死了”,这应该是非常快的,otoh。我认为大多数解决方案都是这样;) 获取当前用户id(检查)时,使用
char(30)
因此,至少,您应该将长度更改为30 这取决于
userid
中的数据类型,如果它是数据库中另一个表的id,则根据parant表中的数据类型保存它。如果是windows用户ID,则将其另存为nvarchar,但请确保已容纳logest用户ID。与nvarchar(50)一样,Windows NT用户身份也被称为SID,是一种新的身份验证。它的字符串表示形式在中指定,封送处理表示形式在中指定。如果要在数据库中存储SID,请使用与sys.databases.owner\u SID
字段相同的表示法:varbinary(85)。要检索登录SID,请使用(它还返回…varbinary(85)
)
特别是不要将身份存储为登录名(domain\user
或user@domain
)因为这些变化的频率比您预期的要高,特别是在大公司。我的在10年内改变了大约5次
或者我应该存储用户ID吗
在堆栈溢出中创建新帐户时
。它接受Google/Facebook或Yahoo
userid,这意味着它使用Passport身份验证
。但它仍然将用户信息保存在数据库中,用于查询/答复/注释/标志等之间的关系
数据类型应该是什么
嗯,这取决于你的要求。如果是非英语语言。就我的答案所知,它必须是
NVarchar(50)
,如果我将使用userid将用户与某个进程连接起来,那么我应该使用SID,但是如果我将userid用作标签,那么使用纯userid是更好的选择,因为SID使我的数据库更难读取,我说得对吗?向用户显示SID没有任何用处,管理员除外。但是,您始终可以在T-SQL或C#中使用将SID转换为名称。“ID是GUID
,但不一定是按类型。”。您可以指定SID
或GUID
。如果您有这么大的公司,GUID
在多个域中是唯一的,而SID
不保证在域中是唯一的。但是SID
向后兼容Windows NT。