sql-server - 如何计算新登录的 SID?

标签 sql-server authentication

我想在两个 sql server 实例上创建多个数据库用户。为了能够轻松地将数据库从一个实例复制到另一个实例,我希望 SID 保持一致。

我的想法是使用可预测的 SID,以最大程度地减少维护痛苦。我梦见这样的事情:

CREATE LOGIN newuser1 WITH PASSWORD = '...', SID = CAST('newuser1' AS BINARY(16))

-- or alternatively:
CREATE LOGIN newuser1 WITH PASSWORD = '...', SID = HASHBYTES('newuser1')

但是,CREATE LOGIN 命令似乎不支持计算 SID 的值:

Meldung 102, Ebene 15, Status 1, Zeile 1
Falsche Syntax in der Nähe von "SID". -- Wrong syntax near "SID"

如何为 SID 使用计算值?

最佳答案

这可以通过将 sql 语句组装到一个变量中并使用 sp_executesql 执行它来实现:

DECLARE @SQL nvarchar(4000)

SET @SQL = 'CREATE LOGIN newuser1 WITH PASSWORD = ''...'', SID = 0x'+CONVERT(VARCHAR(1000), CAST('newuser1' AS binary(16)), 2)
PRINT @SQL
EXEC sp_executesql @SQL

或者,如果你想重用这个方法,你可以使用创建一个存储过程:

CREATE PROCEDURE create_user_with_predictable_sid
    @UserName varchar(256),
    @Password varchar(256)
AS
DECLARE @SQL nvarchar(4000) = 'CREATE LOGIN '+@UserName+' WITH PASSWORD = '''+@Password+''', SID = 0x'+CONVERT(VARCHAR(1000), CAST(@UserName AS binary(16)), 2)
PRINT @SQL
EXEC sp_executesql @SQL
GO  

GO

create_user_with_predictable_sid 'newuser1', '...'
GO

DROP PROCEDURE create_user_with_predictable_sid

关于sql-server - 如何计算新登录的 SID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56771220/

相关文章:

sql-server - 特殊字符(下标)未正确显示

ios - 使用 Apple ID 登录

node.js - 处理 JWT 验证失败

sql-server - SQL Server 与案例合并吗?

c# - 查询n :m-Relationships with LINQ

sql-server - 在存储过程中引用时,动态命名的临时表返回 "invalid object name"

sql-server - 德语元音变音哈希 - SQL Server 上的 SHA256

wcf - 使用 ADAM (AD LDS) 验证来自 Silverlight 的 WCF 调用

windows - Aurelia:如何获取用户窗口的用户名

angularjs - 如何使用 AngularFire 在 Firebase 中使用路由和用户身份验证?