Je crée une réplication SQL Server à l'aide d'un script. Quand j'essaye d'exécuter
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)).
Il s'agit d'un travail créé par un script qui définit la réplication.
Comment déboguer cela?
Active Directory refuse l'accès à votre agent SQL. L'agent doit s'exécuter sous un compte reconnu par le contrôleur de domaine STAR.
Pour moi, les travaux s'exécutaient sous DOMAIN\Administrator et échouaient avec le message d'erreur "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)).
Pour résoudre ce problème, j'ai changé le propriétaire de chaque travail défaillant en sa
. = A parfaitement fonctionné après cela. Les travaux étaient liés au nettoyage de la réplication, mais je ne sais pas s'ils ont été ajoutés manuellement ou ont été ajoutés dans le cadre de la configuration de la réplication - je n'y ai pas participé, donc je ne suis pas sûr.
Nous avons rencontré des erreurs similaires dans un environnement de test sur une machine virtuelle. Si le nom de la machine change en raison de VM clonage à partir d'un modèle, vous pouvez obtenir cette erreur.
Si le nom de l'ordinateur est passé de VIEUX à NOUVEAU.
Un travail utilise cette procédure stockée:
msdb.dbo.sp_sqlagent_has_server_access @login_name = 'OLD\Administrator'
Qui utilise celui-ci:
EXECUTE master.dbo.xp_logininfo 'OLD\Administrator'
Ce qui donne cette erreur SQL 15404
select text from sys.messages where message_id = 15404;
Could not obtain information about Windows NT group/user '%ls', error code %#lx.
Ce qui, je suppose, est correct dans les circonstances. Nous avons ajouté un script au processus de clonage/déploiement VM VM qui recrée la connexion SQL.
Dans mon cas, j'obtenais cette erreur en essayant d'utiliser la fonction IS_ROLEMEMBER()
sur SQL Server 2008 R2. Cette fonction n'est pas valide avant SQL Server 2012.
Au lieu de cette fonction, j'ai fini par utiliser
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
Beaucoup plus verbeux, mais il fait le travail.
Je viens de résoudre ce problème. Dans mon cas, il était contrôleur de domaine n'est pas accessible, car les deux serveurs DNS étaient Google DNS.
J'ajoute juste à la liste de contrôle pour ce problème:
J'ai dû me connecter à VPN pour que le script de publication se déploie avec succès sur la base de données.
J'avais le même problème, qui s'est avéré être causé par la connexion de domaine qui exécute le service SQL verrouillé dans AD. Le verrouillage a été provoqué par une utilisation indépendante du compte de service à une autre fin avec le mauvais mot de passe.
Les erreurs reçues des journaux de l'Agent SQL ne mentionnaient pas le nom du compte de service, juste le nom de l'utilisateur (propriétaire du travail) qui n'a pas pu être authentifié (car il utilise le compte de service pour vérifier avec AD).
Dans notre cas, le compte de service Windows sous lequel SQL Server et SQL Agent s'exécutaient ont été verrouillés dans Active Directory.