Ответ 1
Active Directory отказывается от доступа к вашему агенту SQL. Агент должен работать под учетной записью, которая распознается контроллером домена STAR.
Я создаю репликацию SQL Server с помощью script. Когда я пытаюсь выполнить
The job failed. Unable to determine if the owner (STAR\moorer7) of job L3BPT2M-Atlas-14 has server access (reason: Could not obtain information about Windows NT group/user 'STAR\moorer7', error code 0x5. [SQLSTATE 42000] (Error 15404)).
Это задание, созданное script, которое определяет репликацию.
Как мне отладить это?
Active Directory отказывается от доступа к вашему агенту SQL. Агент должен работать под учетной записью, которая распознается контроллером домена STAR.
Для меня задания выполнялись под DOMAIN\Administrator и с ошибкой с сообщением об ошибке "The job failed. Unable to determine if the owner (DOMAIN\administrator) of job Agent history clean up: distribution has server access (reason: Could not obtain information about Windows NT group/user 'DOMAIN\administrator', error code 0x5. [SQLSTATE 42000] (Error 15404)).
Чтобы исправить это, я изменил владельца каждого неудачного задания на sa
. Работал безупречно после что. Рабочие места были связаны с очисткой репликации, но я не уверен, были ли они добавлены вручную или были добавлены как часть настройки репликации. Я не был связан с ней, поэтому я не уверен.
Мы столкнулись с подобными ошибками в тестовой среде на виртуальной машине. Если имя машины изменяется из-за клонирования виртуальной машины из шаблона, вы можете получить эту ошибку.
Если имя компьютера изменилось с OLD на NEW.
В задании используется эта хранимая процедура:
msdb.dbo.sp_sqlagent_has_server_access @login_name = 'OLD\Administrator'
Что использует этот:
EXECUTE master.dbo.xp_logininfo 'OLD\Administrator'
Что дает эта ошибка SQL 15404
select text from sys.messages where message_id = 15404;
Could not obtain information about Windows NT group/user '%ls', error code %#lx.
Я думаю, что это правильно, в данных обстоятельствах. Мы добавили script к процессу клонирования/развертывания виртуальной машины, который заново создает логин SQL.
В моем случае я получал эту ошибку, пытаясь использовать функцию IS_ROLEMEMBER()
на SQL Server 2008 R2. Эта функция недействительна до SQL Server 2012.
Вместо этой функции я закончил использование
select 1
from sys.database_principals u
inner join sys.database_role_members ur
on u.principal_id = ur.member_principal_id
inner join sys.database_principals r
on ur.role_principal_id = r.principal_id
where r.name = @role_name
and u.name = @username
Значительно более подробный, но он выполняет свою работу.
Просто решил эту проблему. В моем случае контроллер домена не был доступен, поскольку оба сервера DNS были google dns.
Я просто добавляю в контрольный список для этой проблемы:
У меня была та же проблема, которая, как оказалось, была вызвана регистрацией домена, которая заставляет SQL-службу блокироваться в AD. Блокировка была вызвана несвязанным использованием учетной записи службы для другой цели с неправильным паролем.
Ошибки, полученные из журналов агента SQL, не упоминают имя учетной записи службы, просто имя пользователя (владельца задания), которое не может быть аутентифицировано (поскольку оно использует учетную запись службы для проверки с помощью AD).
Мне пришлось подключиться к VPN, чтобы скрипт публикации успешно развернулся в БД.
В нашем случае учетная запись службы Windows, под которой работали SQL Server и агент SQL, была заблокирована в Active Directory.