Comment puis-je configurer une source de données SQL Server dans JBoss pour vous connecter à l'aide d'un utilisateur Active Directory?
JBoss s'exécute en tant qu'utilisateur Active Directory ABC\appuser
. Je veux me connecter à un Serveur MS SQL server 8.0 base de données utilisateur AD ABC\dbuser
. À l'aide du paramètre integratedSecurity=true
, sauf si je précise user=ABC\dbuser;password=dbpass
sur l'url de connexion, le système va essayer de vous connecter en tant que service d'ANNONCES d'utilisateur, ABC\appuser
.
Par cette question, j'ai confirmé que par l'aide de l'url suivante, je peux me connecter à la base de données comme ABC\dbuser
lors de l'exécution de l'application en ABC\appuser
:
jdbc:sqlserver://MYHOSTNAME:1433;DatabaseName=MyDatabaseName;integratedSecurity=true;user=ABC\dbuser;password=dbpass
Malheureusement, lorsque j'ai mis l'url de la source de données dans la configuration de JBoss xml ( JBoss\jboss-eap-6.1.0\standalone\configuration\standalone.xml
) comme suit:
<datasource jndi-name="java:jboss/datasources/MyDatabaseName" pool-name="MyPoolName" enabled="true" use-java-context="true">
<connection-url>jdbc:sqlserver://MYHOSTNAME:1433;DatabaseName=MyDatabaseName;integratedSecurity=true;user=ABC\dbuser;password=dbpass</connection-url>
<driver>sqlserver</driver>
<pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>10</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name></user-name>
<password></password>
</security>
</datasource>
Je suis incapable de créer le pool de ressources avec cet avertissement:
WARN
[org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (JCA PoolFiller)
IJ000610: Unable to fill pool:
javax.resource.ResourceException: Could not create connection
Valeurs de réglage pour les user-name
et password
les entrées XML crée un échec similaire avertissement.
Ma solution actuelle options semblent être les suivants:
- s'étendant selon la classe à l'aide de JBoss est de créer la source de données, pour la remplacer par une classe personnalisée qui s'applique le
connection-url
valeur comme prévu ou - changement de JBoss pour exécuter en tant que
ABC\dbuser
ou - donner le service JBoss utilisateur
ABC\appuser
accès de base de données soit en lui donnant un accès direct ou de l'ajouter à un Groupe d'ANNONCES avec accès.
Aucune de ces solutions de contournement est préférable; il doit être un plus élégant, la solution retenue. Comment puis-je résoudre ce problème?
OriginalL'auteur JoshDM | 2014-07-11
Vous devez vous connecter pour publier un commentaire.
Je suis surpris de la chaîne de connexion est de travail. Ma compréhension est que le integratedSecurity propriété de Microsoft fourni pilote JDBC travaillé de la même manière que la Sécurité Intégrée ou de Confiance dans les propriétés de Connexion l'équivalent .NET de la chaîne de connexion.
C'est-à-dire que le réglage de integratedSecurity true rend le pilote JDBC efficacement ignorer l'utilisateur et un mot de passe et essayez de vous connecter en tant qu'utilisateur que l'application est en cours d'exécution.
Je n'ai pas de solution avec le pilote Microsoft SQL Server, mais ce problème peut être résolu en utilisant l'open source jTDS Pilote JDBC.
Pour la grande section, vous devriez être en mesure de remplacer le fichier JAR du pilote JDBC et de modifier la connexion XML à ressembler à quelque chose comme ceci:
Selon la configuration de SQL Server que vous connectez, vous devrez peut-être également ajouter
useNTLMv2=true
à l'URL de connexion.c'est à dire la totalité de l'URL de connexion serait:
jdbc:jtds:sqlserver://MYHOSTNAME:1433/MyDatabaseName;domain=ABC;useNTLMv2=true
EDIT: Malheureusement, dans la version de JBoss EAP vous ciblez l'ajout d'un nouveau pilote JDBC n'est pas aussi facile que de laisser tomber le pot au bon endroit.
Voici la plutôt lourde les instructions pour ajouter le nouveau pilote JDBC:
Créer le dossier JBOSS_HOME\modules\net\sourceforge\jtds\principale
Copier le fichier jtds-1.3.1.jar dans le dossier.
Créer un fichier nommé module.xml dans le dossier avec le contenu suivant
Ajoutez le code XML suivant pour standalone.xml (modifier les pilotes de l'élément à ajouter l'élément conducteur si il existe déjà)
OriginalL'auteur Christopher Flather
Tout d'abord, je ne suis même pas sûr de savoir comment la chaîne de connexion que vous utilisez fonctionne à tous. Si vous spécifiez la connexion de confiance et un user/pass combo une erreur doit être retourné depuis à l'aide de deux n'est pas possible. Vous souhaitez vous connecter en utilisant le compte courant de contexte ou d'un nom d'utilisateur/mot de passe combo, pas les deux. De même, SQL Server ne prend pas en magasin AD mots de passe ni d'authentifier un utilisateur/combo passe autre chose qu'un compte de Connexion SQL Server.
Deuxièmement, je ne suis pas sûr de vous vraiment dire SQL Server 8.0 RC@ comme RC2 signifierait release candidate 2 de la version 8.0 qui a été SQL Server 2000. Si oui, ce n'est pas du tout supporté et je dirais même de la migration vers 2012 ou 2014.
Maintenant, je ne suis pas vraiment bien versé dans JBoss mais vous avez (comme je le vois) deux options différentes.
En quelque sorte, à l'intérieur de JBoss lors d'un raccordement à la source de données va être tenté le contexte est emprunt d'identité de l'ABC\AppUser compte de l'ABC\DBUser compte. Cela devra être fait à l'intérieur de JBoss, malheureusement, je ne crois pas que cela soit possible (même si je ne suis pas positive).
Donner de connecter et d'autorisations d'emprunt d'identité (uniquement pour l'ABC\DBUser login) pour l'ABC\AppUser compte à l'intérieur de SQL Server. L'utilisation de JBoss source de données d'un élément de configuration de la nouvelle-connectez-sql pour exécuter l'usurpation de l'identité de commande pour devenir ABC\DBUser à l'intérieur de SQL Server (EXÉCUTER en tant QUE LOGIN ='ABC\DBUser' AVEC NO_REVERT).
OriginalL'auteur Sean Gallardy