8

目前我将用户的 Windows 帐户存储为 sql server 中的 nvarchar(10),这是存储用户 ID 的正确方法吗?数据类型应该是什么?或者我什至应该存储用户标识?

4

5 回答 5

12

Windows NT 用户身份被称为SID,一个安全标识符。它的字符串表示在SID String Format Syntax中指定,编组表示在SID--Packet Representation中指定。如果要在数据库中存储 SID,请使用与字段相同的表示形式sys.databases.owner_sid varbinary(85)。要检索登录 SID,请使用SUSER_SID(也返回... varbinary(85))。

特别是不要将身份存储为登录名(domain\useruser@domain),因为这些更改方式比您预期的更频繁,特别是在大公司中。我的在 10 年内改变了大约 5 次。

于 2012-06-18T10:35:00.280 回答
2

这是一个非常复杂的问题。

从技术上讲,不要存储名称。存储 ID,顺便说一句,无论如何它都是按类型划分的 GUID。

这意味着当您重命名帐户时您是安全的,这就是 WINDOWS 所做的。有没有见过当您打开文件的权限时需要一秒钟才能显示名称?并先显示一个数字?那是因为 Windows 需要一点时间才能从域控制器中获取名称。

SIMPLE 是存储帐户名称,但这意味着您在重命名时“死”了,这应该是相当的速度,otoh。我认为大多数解决方案都是这样做的;)

于 2012-06-18T10:24:27.290 回答
1

或者我什至应该存储用户标识

在中创建新帐户时Stack overflow。它接受Google/Facebook or Yahoo用户标识,这意味着它使用Passport Authentication. 但它仍然将用户信息保留在数据库中,用于查询/回复/评论/标志等之间的关系。

数据类型应该是什么?

好吧,这取决于您的要求。如果是非英语语言。肯定是NVarchar(50)

于 2012-06-18T10:46:51.940 回答
1

userid如果它是来自数据库中另一个表的 id,则取决于数据的类型,然后根据父表中的数据类型将其保存。如果它是 windows 用户 ID,则将其保存为 nvarchar,但确保容纳 logest 用户 ID。像 nvarchar(50)

于 2012-06-18T10:31:31.717 回答
1

获取当前用户 id(检查这里)时,char(30)使用。

因此,至少,您应该将长度更改为 30!

于 2012-06-18T10:25:02.080 回答