Impossible de se connecter à SQL Server à partir de PowerShell avec les informations d'identification de domaine
J'ai un problème lorsque je ne peut pas se connecter à SQL Server à l'aide d'informations d'identification de domaine. À l'aide de la SA informations d'identification qu'il fonctionne et que la requête s'exécute comme prévu. Mais quand j'utilise les informations d'identification de domaine, j'obtiens une erreur.
Voici le script:
$SQLServer = 'server.domain.com'
$SQLDBName = 'DBname'
$username = "DOMAIN\user"
$password = "password"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
#--> With SA, it works, with DOMAIN creds, it does not
#$SqlConnection.ConnectionString = "Server=$SQLServer; Database=$SQLDBName; User ID=sa; Password=SApassword;"
$SqlConnection.ConnectionString = "Server=$SQLServer; Database=$SQLDBName; User ID=$username; Password=$password;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = 'select count (*) from my.table'
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
Et voici l'erreur que j'obtiens lorsque je lance le script:
Exception d'appeler "Remplir" avec "1" argument(s): "Une liée au réseau ou spécifique à l'instance erreur s'est produite lors
l'établissement d'une connexion à SQL Server. Le serveur n'a pas été trouvé ou n'est pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions à distance. (fournisseur: Fournisseur de canaux Nommés, erreur: 40 - impossible d'ouvrir une connexion à SQL Server)À C:\scripts\PowerShell\myscript.ps1:28 char:1
+ $SqlAdapter.Remplir($DataSet)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlException
Je me dois de souligner le fait que je suis connecté à un Serveur SQL server à partir d'un ordinateur qui n'est PAS dans le domaine (donc je ne peut pas utiliser n'importe quelle sorte d'authentification passthrough).
Toutes les idées pour lesquelles je ne peux pas connecter avec mes informations d'identification de domaine? J'ai suivi d'autres postes qui offrent des conseils sur la vérification des connexions, pare-feu etc. Que tout est en ordre de marche et le script fonctionne parfaitement comme sa (local) de l'utilisateur. Tout simplement pas sur le domaine..
OriginalL'auteur Mike J | 2013-03-25
Vous devez vous connecter pour publier un commentaire.
Si vous avez des informations d'Identification SQL utiliser quelque chose comme ceci:
Si vous avez des informations d'Identification de Domaine utiliser quelque chose comme ceci:
Cela fonctionne dans mon environnement. Bien sûr, après que vous avez à faire:
OriginalL'auteur Thomas
Vous ne pouvez pas vous connecter avec les informations d'identification de domaine de CETTE FAÇON.
Informations d'identification de domaine sont présents dans le processus d'établissement de la connexion. Le compte à l'aide dans le processus (ou si vous utilisez le RÉSEAU de la SEULE option dans RUNAS) sera utilisé pour la connexion à SQL Server à l'aide de la sécurité intégrée.
Bien sûr, parce que votre processus NE peut effectivement exécuté en tant qu'utilisateur de ce domaine parce que votre ordinateur n'est pas dans une relation de confiance avec ce domaine, je vous recommande de regarder à l'aide de RUNAS /NETONLY.
Cela vous demandera un mot de passe, et vous pouvez écrire votre propre valeur de remplacement qui utilise le CreateProcessWithLogonW plutôt l'API.
https://stackoverflow.com/a/758805/18255
Cela permettra à votre processus pour utiliser les informations d'identification de domaine à partir de l'autre domaine qui ne sont utilisés que dans les connexions réseau et vérifié à l'époque, tout en utilisant le compte local pour d'autres choses. Cela PEUT causer des problèmes à d'autres ressources du réseau qui pourrait compter sur votre local (ou un autre nom de domaine?) compte, je n'ai pas entièrement testé l'RUNAS /NETONLY œuvres si DIFFÉRENTES connexions réseau à partir du même processus.
OriginalL'auteur Cade Roux
Essayer
$SqlConnection.ConnectionString = "Server=myPC;Database=myDB;Integrated Security=True"
OriginalL'auteur Kirt Carson
Si vous n'êtes pas inquiet au sujet de la sécurité, vous pouvez le faire comme ceci (pas sûr, cependant):
Il fonctionne dans SQL Server 2012. Mais, encore une fois, pas sécurisé. L'espoir qui aide quelqu'un...
OriginalL'auteur W3BGUY
Vous ne pouvez pas passer nom d'utilisateur et le mot de passe en tant que chaîne de caractères.
Essayer quelque chose comme cela -
fait un edit pour convertir un mot de passe pour securestring. Cela fonctionne pour vous?
Cette technique n'est pas d'aller travailler. Il n'y a aucun moyen de l'utilisation intégrée de sécurité de Windows avec un nom d'utilisateur/mot de passe dans la chaîne de connexion.
OriginalL'auteur Srikanth Venugopalan