web-dev-qa-db-fra.com

Connexions SQL Server entre domaines à l'aide de l'authentification Windows

J'ai une instance nommée SQL Server 2005 utilisant l'authentification Windows avec des groupes de domaines servant de connexions. Les structures de domaine sont les suivantes:

      Forest1                Forest2
      /      \                  |
Domain1       Domain2        Domain3

Les objets sont organisés dans les domaines suivants:

Forest1.Domain1

  • Utilisateurs
  • Groupes mondiaux

Forest1.Domain2

  • Instance SQL Server
  • Groupes locaux de domaine (servant de connexions)

Forest2.Domain3

  • Utilisateurs
  • Groupes mondiaux

Tous mes utilisateurs existent dans Domain1 et Domain3 mais la boîte SQL Server existe dans Domain2. En tant que tel, mes connexions sont des groupes de domaines dans Domain2. Lorsqu'un utilisateur dans Domain1 est ajouté à un groupe local de domaine dans Domain2 et tente de se connecter en utilisant le protocole TCP/IP à l'instance SQL Server, il reçoit le message d'erreur suivant:

Impossible de se connecter à <instance>. La connexion a échoué pour l'utilisateur "Domaine1\nom_utilisateur". (Microsoft SQL Server, erreur: 18456)

J'ai essayé d'autres choses:

  • Si j'ajoute explicitement l'utilisateur comme identifiant, il peut se connecter.

  • Si j'ajoute un Domain1 groupe global dont l'utilisateur est explicitement membre en tant que login, il peut se connecter.

  • Si j'ajoute un Domain1 groupe global dont l'utilisateur est membre en tant que membre de Domain2 groupe local de domaine utilisé comme identifiant, il ne peut pas se connecter.

  • EDIT: Si j'ajoute le Domain2 groupe local de domaine au groupe Demote Desktop Users sur le Domain2 serveur hébergeant l'instance SQL Server, le Domain1 l'utilisateur peut se connecter avec succès au serveur - je peux également me connecter localement à l'instance en tant que Domain1 utilisateur (mais pas à distance).

  • EDIT: Si j'ajoute le Domain2 groupe local de domaine à un groupe de serveurs local et créez une connexion SQL Server pour ce groupe de serveurs local, le Domain1 l'utilisateur ne peut toujours pas se connecter à l'instance à distance.

  • EDIT: Si je change le protocole du réseau de connexion en "Named Pipes", le Domain1 l'utilisateur peut se connecter à distance avec succès.


D'après ce que je comprends (référence à ces articles TechNet: portée du groupe et groupes imbriqués ), le groupe de domaine DOIT être un groupe local de domaine afin d'inclure des utilisateurs des deux Domain1 et Domain3.

Comment puis-je utiliser un groupe de domaines comme connexion SQL Server à l'aide de l'authentification Windows de sorte que le groupe de domaines puisse contenir des utilisateurs des deux Domain1 et Domain3 et les utilisateurs peuvent se connecter à distance via TCP/IP?

PLUS DE NOTES

  • Le compte de service pour l'instance nommée SQL Server est un compte d'utilisateur dans Domain1
  • Des SPN ont été ajoutés pour le compte de service (y compris le nom du serveur et les noms d'alias)

[~ # ~] mise à jour [~ # ~]

Modification du compte de service d'instance de service SQL pour qu'il soit dans Domain2 semble avoir résolu le problème. Je vais enquêter plus avant et publier mes résultats!

26
bitxwise

Comme mentionné dans la mise à jour de ma question, changer le compte de service pour qu'il soit en Domain2 A résolu le problème. Que se passait-il donc?

Le problème - expliqué

D'après ce que je peux dire (également avec l'aide d'un représentant Microsoft), car le compte de service était à l'origine un utilisateur Domain1, Il n'a pas pu déterminer de quels groupes locaux de domaine l'utilisateur auquel se connecter est membre lorsque l'utilisateur s'authentifie via Kerberos. Le principal problème que c'était un problème Kerberos était lorsque je me suis connecté avec succès en utilisant "Named Pipes" car cela utilise l'authentification NTLM.

Solution globale

Pour tout rassembler, pour ajouter avec succès des utilisateurs de Domain1 Et Domain3 En tant que membres de groupes dans Domain2 Afin que les groupes puissent être utilisés comme connexions SQL Server avec authentification Windows, voici une liste d'exigences (ou du moins fortement encouragées):

  1. Relations de confiance établies entre les domaines
    1. Au minimum, les approbations à sens unique doivent être configurées de sorte que Domain2 Approuve Domain1 Et Domain3
  2. Les groupes dans Domain2 Doivent avoir la portée "Domaine local"
    1. Vous pouvez ainsi ajouter des utilisateurs et des groupes à partir de Domain1 Et Domain3
    2. Voir ici pour plus d'informations
  3. Utilisez SQL Server Configuration Manager pour désigner un utilisateur Domain2 Non administratif comme identité de compte de service
    1. MSDN explique pourquoi l'utilisation d'un compte d'utilisateur de domaine peut être préférée
    2. Même si le gestionnaire de configuration est censé ajouter des utilisateurs à des groupes spécifiques SQL Server 2005 locaux pour vous (c'est-à-dire SQLServer2005MSSQLUser $ MY_MACHINE $ MY_INSTANCE), j'ai rencontré quelques cas où ce n'était pas le cas. Vérifiez donc vos groupes locaux pour vous assurer qu'ils ont été correctement mis à jour avec votre compte utilisateur Domain2.
    3. Bien que la configuration de SQL Server doive automatiquement attribuer les autorisations appropriées à leurs groupes locaux, encore une fois, je suis tombé sur quelques cas où ce n'était pas le cas. Si cela vous arrive, vous pouvez référencer cet article MSDN avec l'article mentionné précédemment pour les conditions d'autorisation.
  4. Configurez un nom principal de service (SPN) pour l'hôte d'instance SQL Server (y compris les alias) et le compte de service Domain2
    1. Le SPN est requis pour l'authentification mutuelle entre le client et l'hôte du serveur
    2. Voir cet article TechNet pour plus d'informations
  5. Selon la façon dont vous comptez utiliser l'emprunt d'identité, vous souhaiterez peut-être autoriser le compte de service Domain2 À être approuvé pour la délégation
    1. Voir cet article TechNet pour plus d'informations
  6. Activer les connexions distantes pour l'instance de service SQL
  7. Enfin, créez des connexions pour les groupes Domain2 Souhaités et tous les membres Domain1 Ou Domain3 Devraient pouvoir se connecter à distance!

Remarque

Comme toujours pour toute activité de réseau distant, vérifiez vos pare-feu pour vous assurer que vos ports SQL Server ne sont pas bloqués. Bien que le port par défaut soit 1433, vérifiez que votre port est en clair.

16
bitxwise

Ok, j'ai également rencontré le problème en 2017, difficile de trouver une solution, enfin, je ne le trouve que pour mon cas.

Mon environnement,

Forêt 1 (Domaine1) --- CONFIANCE --- Forêt 2 (Domaine2)

J'ai un compte de service dans Domain2 essayant de me connecter au serveur SQL dans Domain1 en utilisant l'authentification Windows.

Et, le message d'erreur suivant apparaît.

Échec de la connexion. La connexion provient d'un domaine non approuvé et ne peut pas être utilisée avec l'authentification Windows. (Microsoft SQL Server, erreur: 18452)

La solution est assez simple, sur domain1, ouvrez l'outil des domaines et approbations Active Directory,

Approbations -> approbations sortantes -> propriétés -> authentification -> passer à "Authentification à l'échelle de la forêt"

Mon problème a été résolu.

1
Larry Song