Пользователь или группа 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.
Перейдите в Инструменты -> Управление компьютером.
Откроется окно, разверните Системные инструменты -> Локальные пользователи и группы.
Нажмите на Группы, и вы увидите список групп в правом столбце окна.
Дважды щелкните Администратор, откроется новое окно, и вы заметите, что связанный пользователь не находится там.
Нажмите кнопку Добавить, откроется новое окно. Здесь, под местоположением, вы можете изменить местоположение вашего домена.
Нажмите " Дополнительно", откроется приглашение войти в систему, просто войдите в систему с учетной записью администратора виртуальной машины.
Нажмите 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.
Я боролся с этим в течение ЧАСОВ прежде, чем я наконец решил это!!
Я также столкнулся с этой ошибкой для пользователей, которые были:
- создано в AD
- предоставил некоторые разрешения SQL
- переименован в 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>\
и т.д. не сработало.