Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在数据库中存储windows用户ID?_Sql Server_Sql Server 2008_Sqldatatypes_Userid - Fatal编程技术网

Sql server 如何在数据库中存储windows用户ID?

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需要一点时间才能从域控制器获取名称 简单的方法是存储帐户名,但这意味着您在

目前我正在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。