Как рассчитать SID для новых логинов? - PullRequest
2 голосов
/ 26 июня 2019

Я хочу создать несколько пользователей базы данных на двух экземплярах сервера sql.Чтобы иметь возможность легко копировать базы данных из одного экземпляра в другой, я хочу, чтобы идентификаторы безопасности были согласованными.

Моя идея заключалась в том, чтобы использовать предсказуемые идентификаторы безопасности, чтобы минимизировать трудности при обслуживании.Мне снится что-то вроде этого:

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

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

Однако вычисление значений для SID, похоже, не поддерживается командой CREATE LOGIN:

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

Как использоватьрасчетное значение для SID?

1 Ответ

1 голос
/ 26 июня 2019

Это может быть достигнуто путем сборки оператора 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...