Сценарий входа в SQL Server с аутентификацией Windows без имени машины - PullRequest
4 голосов
/ 12 февраля 2009

Я хочу написать сценарий SQL 2005 для создания нового имени входа, использующего проверку подлинности Windows. Пользователь Windows является локальной учетной записью (не доменной). Локальная учетная запись с одинаковым именем существует на многих компьютерах SQL Server, и я хочу запустить один и тот же сценарий на всех них.

Это казалось достаточно простым:

CREATE LOGIN [MyUser]
FROM WINDOWS

Однако это не работает! SQL возвращает ошибку, говоря Give the complete name: <domain\username>.

Конечно, я могу сделать это для одной машины, и она работает, но тот же скрипт не будет работать на других машинах.

Ответы [ 2 ]

12 голосов
/ 12 февраля 2009

Похоже, sp_executesql является ответом, как пляж опубликовал. Я также опубликую свою, потому что @@ SERVERNAME не будет работать правильно, если вы используете именованные экземпляры SQL, как мы.

DECLARE @loginName SYSNAME
SET @loginName = CAST(SERVERPROPERTY('MachineName') AS SYSNAME) + '\MyUser'

IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE [name] = @loginName)
BEGIN
    DECLARE @sql NVARCHAR(1000)
    SET @sql = 'CREATE LOGIN [' + @loginName + '] FROM WINDOWS'
    EXEC sp_executesql @sql
END
4 голосов
/ 12 февраля 2009

Это только сработало для меня:

DECLARE @sql nvarchar(1000)
SET @SQL = 'CREATE LOGIN [' + @@SERVERNAME + '\MyUser] FROM WINDOWS'
EXEC sp_executeSQL @SQL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...