目前我将用户的 Windows 帐户存储为 sql server 中的 nvarchar(10),这是存储用户 ID 的正确方法吗?数据类型应该是什么?或者我什至应该存储用户标识?
5 回答
Windows NT 用户身份被称为SID,一个安全标识符。它的字符串表示在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 次。
这是一个非常复杂的问题。
从技术上讲,不要存储名称。存储 ID,顺便说一句,无论如何它都是按类型划分的 GUID。
这意味着当您重命名帐户时您是安全的,这就是 WINDOWS 所做的。有没有见过当您打开文件的权限时需要一秒钟才能显示名称?并先显示一个数字?那是因为 Windows 需要一点时间才能从域控制器中获取名称。
SIMPLE 是存储帐户名称,但这意味着您在重命名时“死”了,这应该是相当的速度,otoh。我认为大多数解决方案都是这样做的;)
或者我什至应该存储用户标识
在中创建新帐户时Stack overflow
。它接受Google/Facebook or Yahoo
用户标识,这意味着它使用Passport Authentication
. 但它仍然将用户信息保留在数据库中,用于查询/回复/评论/标志等之间的关系。
数据类型应该是什么?
好吧,这取决于您的要求。如果是非英语语言。肯定是NVarchar(50)
userid
如果它是来自数据库中另一个表的 id,则取决于数据的类型,然后根据父表中的数据类型将其保存。如果它是 windows 用户 ID,则将其保存为 nvarchar,但确保容纳 logest 用户 ID。像 nvarchar(50)
获取当前用户 id(检查这里)时,char(30)
使用。
因此,至少,您应该将长度更改为 30!