Как создать учетную запись SQL Server для учетной записи службы в неанглийской Windows? - PullRequest
7 голосов
/ 27 июня 2011

Для системы Windows Server 2008 R2, в которой учетные записи служб используют не английский язык отображения, в SQL Server 2008 следующий оператор Transact-SQL завершается ошибкой:

CREATE LOGIN [NT AUTHORITY\NETWORK SERVICE] FROM WINDOWS ...

со следующей ошибкой:

Пользователь или группа Windows NT 'NT AUTHORITY \ NETWORK SERVICE' не найдена.Проверьте имя еще раз.

(или то же сообщение на неанглийском языке отображения для учетных записей служб, в зависимости от контекста).

Этот же оператор завершается успешно, если службаучетные записи используют английский в качестве языка отображения.

Причина, по-видимому, ясна: например, в немецкой системе отображаемое имя для этой учетной записи NT-AUTORITÄT\NETZWERKDIENST, а имя NT AUTHORITY\NETWORK SERVICE (с пробелом) нераспознан.Также не работает локализованное имя NT AUTHORITY\NETWORKSERVICE (без пробела).

Мой вопрос: как мне переписать приведенное выше утверждение, чтобы оно работало независимо от языка отображения?Или я вынужден узнать локализованное имя (в моем случае в InstallScript)?Тогда я могу использовать

CREATE LOGIN [NT-AUTORITÄT\NETZWERKDIENST] FROM WINDOWS

, который работает работает ...

Ответы [ 3 ]

4 голосов
/ 24 июля 2011

Из того, что я пробовал, и из того, что я прочитал в немецкой ветке форума под названием "Известный SID im SQL Server nutzen" , это невозможно. Очевидно, к сожалению, SQL Server CREATE LOGIN был предназначен для приема только локализованного имени в формате DOMAIN \ username.

Подсказка из того же потока заключается в том, чтобы посмотреть раздел «Локализованные имена служб» в «Настройка учетных записей служб Windows» для локализованных имен, которые необходимо использовать в операторе CREATE LOGIN .

Единственная альтернатива - попытаться выяснить системный язык системы Windows, на которой запущен SQL Server, затем использовать таблицу «Имена локализованных служб», чтобы найти имя локализованной учетной записи службы, и использовать ее для создания работающего CREATE LOGIN заявление.

3 голосов
/ 08 августа 2014

Это работает для меня на SQL Server 2008R2:

IF (SELECT COUNT(*)  FROM sys.server_principals WHERE sid=0x010100000000000514000000)=0  
    BEGIN
        DECLARE @cmd VARCHAR(200)
        SET @cmd = N'CREATE LOGIN [' + SUSER_SNAME(0x010100000000000514000000) + '] FROM WINDOWS'
        EXEC (@cmd)
        PRINT 'Created network service server login from SID'
    END
ELSE
        PRINT 'Network service account found from SID, server login not created'

Кто-нибудь может проверить это на неанглийской Windows - немецкой, итальянской?

2 голосов
/ 27 июня 2011

Вы должны иметь возможность изменить язык, чтобы это работало.

SET LANGUAGE us_english
CREATE LOGIN [NT AUTHORITY\NETWORK SERVICE] FROM WINDOWS ...

Я работаю на серверах со швейцарско-немецкой локалью с us_english для SQL Server, и нам никогда не приходилось делать подобные вещи. Так что я предполагаю, что SQL Server использует свои настройки языка.

НТН

...