Пользователь или группа Windows NT 'DOMAIN\USER' не найдены?

Я пытаюсь создать пользователей на сервере SQL из группы Active Directory, так как приложение, с которым я работаю, изначально не поддерживает проверку подлинности Windows и полагается на отдельные имена входа, создаваемые на сервере SQL, так как разрешения уровня приложения управляются в приложении, а не чем использование ролей SQL. В связи с этим каждому пользователю, который должен получить доступ к приложению, необходимо создать своего собственного пользователя для экземпляра SQL, на котором находится база данных приложений, чтобы пользователю затем могли быть назначены индивидуальные разрешения в приложении.

Я читаю список пользователей из группы Active Directory, которую мы определили, используя следующее;

exec master..xp_logininfo 'domain\groupname', 'members'

Это возвращает результат, подобный следующему;

account name    type  privilege  mapped login name  permission path
DOMAIN\USER     user  user       DOMAIN\USER        DOMAIN\GROUPNAME

По большей части, пользователи, возвращенные в этом списке, могут быть созданы на экземпляре SQL без какой-либо драмы. Я создаю пользователей как учетные записи SQL, используя sp_grantlogin в первую очередь, перед тем как перейти к каждому новому входу в систему, доступ к базе данных приложения. Однако сообщается, что несколько пользователей не существуют. Я получаю следующую ошибку в результате запуска sp_grantlogin;

Msg 15401, Level 11, State 1, Procedure sp_grantlogin, Line 49
Windows NT user or group 'DOMAIN\USER' not found. Check the name again.

Очевидно, что в приведенном выше сообщении об ошибке я удалил фактическое имя пользователя. Почему бы xp_logininfo вернуть пользователя, который не может быть создан с sp_grantlogin? Есть ли что-то очевидное, чего мне не хватает?

6 ответов

Это просто означает, что пользователь не входит в группу администраторов. Если ваша проблема похожа на мою, где ваша Active Directory находится на другой виртуальной машине, а ваш SQL Server на другой. И вы присоединили домен Active Directory к вашей виртуальной машине SQL Server, а затем вы должны сделать следующее на виртуальной машине SQL Server.

  1. Перейдите в Инструменты -> Управление компьютером.

  2. Откроется окно, разверните Системные инструменты -> Локальные пользователи и группы.

  3. Нажмите на Группы, и вы увидите список групп в правом столбце окна.

  4. Дважды щелкните Администратор, откроется новое окно, и вы заметите, что связанный пользователь не находится там.

  5. Нажмите кнопку Добавить, откроется новое окно. Здесь, под местоположением, вы можете изменить местоположение вашего домена.

  6. Нажмите " Дополнительно", откроется приглашение войти в систему, просто войдите в систему с учетной записью администратора виртуальной машины.

  7. Нажмите Find Now со всеми полями, как есть. В представленном списке пользователей дважды щелкните пользователя, импортированного из Active Directory, и нажмите кнопку " ОК".

У меня был очень похожий случай, тот же код ошибки 15401, но в этом случае я добавлял пользователей из домена в группу на сервере, где у меня был SQL; тогда просто добавьте группу в движок SQL с той же ролью.

USE [master]
GO
CREATE LOGIN [localhost\Administrators] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
Msg 15401, Level 16, State 1, Line 3
Windows NT user or group 'localhost\Administrators' not found. Check the name again.

Затем в ссылке PRB: используйте BUILTIN\Group, чтобы предоставить доступ к предопределенным группам Windows NT.

Я нашел проблему, поэтому решение было:

USE [master]
GO
CREATE LOGIN [BUILTIN\Administrators] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [BUILTIN\Administrators]
GO
Command(s) completed successfully.

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

Я могу дать вам совет, сделав это в Windows 7, хотя это может быть неактуально.

Проблема была в том, что я переименовал учетную запись пользователя в интерфейсе Windows. Имя появилось правильно в Windows, и я использовал новое имя для входа в систему. Но за кулисами он все еще использовал старое имя, которое и было тем, что искал SQL Server.

Я боролся с этим в течение ЧАСОВ прежде, чем я наконец решил это!!

Я также столкнулся с этой ошибкой для пользователей, которые были:

  1. создано в AD
  2. предоставил некоторые разрешения SQL
  3. переименован в AD

Затем я пытаюсь добавить это новое, переименованное имя учетной записи пользователя на тот же сервер / базу данных, появляется сообщение об ошибке 15401, уровень 11, состояние 1, процедура sp_grantlogin, строка 49.

Я выполнил действия, описанные в http://support.microsoft.com/kb/324321/en-us и эта команда вернула старое имя учетной записи пользователя перед переименованием:

SELECT name FROM syslogins WHERE sid = SUSER_SID ('YourDomain\YourLogin')

вернул YourDomain\OldLogin

после выполнения exec sp_revokelogin 'YourDomain\OldLogin'

проблема была исправлена, sp_grantlogin теперь работает нормально.

PS в качестве другого метода тестирования я предлагаю запускать sp_grantlogin удаленно, с другого сервера. Может получиться.

Вы меняете регистр имени пользователя перед использованием sp_grantlogin?

Если у вас есть регистр сервера с учетом регистра, тогда регистр пользователя AD должен быть точно указан.

Вы можете найти параметры сортировки сервера, выполнив:

select serverproperty('collation')

Если у вас есть сортировка сервера с учетом регистра, и вы не связываетесь с регистром, вероятно, существует несоответствие с тем, что xp_logininfo возвращается и фактический случай в AD. В этом случае попробуйте создать пользователя с вариациями кейса.

Если ничего из этого не применимо, загляните в аккаунт. Отключено ли это, можете ли вы войти с ним и т. Д. Если suser_sid() возвращает null, то с ним должны быть какие-то проблемы.

Моя проблема заключалась в длине входа в систему. ВDomain\Userсинтаксис Windows использует так называемый синтаксис до Windows 2000. Этот синтаксис ограничивает длину имени пользователя до 20 символов. Вам нужно усечь имя пользователя до первых 20 символов, и тогда оно должно работать, например:

Domain\Abcdefghijklmnopqrstuvwxyz

Становится

Domain\Abcdefghijklmnopqrst

Если вы используете не английский язык или использовали его на своем компьютере, вам, возможно, придется локализовать данные пользователя, которые вы пытаетесь использовать.

Например [NT AUTHORITY\Network Service] на шведской машине стоит [NT INSTANS\Nätverkstjänst],

Потратил часы, пытаясь понять, почему BUILTIN\, NT AUTHORITY\, <MachineName>\ и т.д. не сработало.

Другие вопросы по тегам