dani
Goto Top

ODBC Datenquelle (System-DSN) automatisch anlegen

Hallo zusammen,
wir müssen auf einigen Rechner (Windows 7 Enterprise, SP1, 64Bit) eine ODBC-Datenquelle (32Bit, SYSTEM-DSN) anlegen. Wir haben bereits einige Versuche hinter uns.
Leider können wir nicht den Windowsbenutzernamen verwenden, sondern einen dedizierten SQL-Benutzer. Lässt sich leider nicht ändern.

Versuch 1:
Verteilung per Gruppenrichtlinie. Leider hat dies nicht funktioniert. Auf Nachfrage beim Microsoft Support wurde uns mitgeteilt, dass dieses Problem unter Windows Server 2008R2 SP1, 64Bit bekannt sei. Leider steht noch nicht fest, ob der Fehler überhaupt gefixt wird. Hat es jemand von euch am Laufen?

Versuch 2:
Es gibt ein Tool odbcconf.exe. Dieses haben wir wie folgt aufgerufen:
ODBCCONF.EXE /a {CONFIGSYSDSN "SQL Server" "DSN=dsnanme|Server=dbserver|Database=datenbank"}  
.
Damit wird die Verbindung sauber angelegt. Ich habe aber keinen Parameter gefunden um Benutzername und Passwort mitzugeben.

Hier im Forum bin auf ODBC (User-DSN) Datenquelle mit Password per Script anlegen gestoßen, funktioniert aber nicht (mehr).
Unter Windows 8 bzw. Server 2012/r2 gibt es eine neue Reihe von Befehlen für ODBC. Leider nicht verfügbar für Windows 7.

Was für uns noch unklar ist, ob es per VBScript, Powershell, etc... eine Möglichkeit gibt, diese Datenquelle anzulegen? Es muss eben der Benutzer + Passwort übergeben werden.


Grüße,
Dani

Content-Key: 234590

Url: https://administrator.de/contentid/234590

Printed on: April 16, 2024 at 22:04 o'clock

Member: jsysde
jsysde Apr 04, 2014 at 14:25:29 (UTC)
Goto Top
Mahlzeit.

Uih, das ist schon ne Weile her, aber letztlich sind die System-DSNs auch nur Registry-Einträge - und genau darüber hab ich die auch angelegt, allerdings unter HKCU statt unter HKLM, aber die Pfade kannst du ja anpassen. Diese wären:
[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources]
[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\<softwarename>]

Installiere mal ein System manuell und schau dir dann die gemachten Einträge an. Prinzipiell sollte das funktionieren, wenn du die einfach auf allen Systemen per GPO und/oder Skript in die Registry schreibst.

Cheers,
jsysde
Member: Dani
Dani Apr 04, 2014 at 14:31:17 (UTC)
Goto Top
Mahlzeit,
danke für deine Antwort. Leider stehen dort keine Passwörter drin, sondern die reinen Verbindungsdaten.


Grüße,
Dani
Member: colinardo
colinardo Apr 04, 2014 updated at 15:14:35 (UTC)
Goto Top
Hallo Dani,
das haben andere auch schon versucht:
Es lässt sich für eine System-DSN dauerhaft kein Passwort hinterlegen.
Übergebe Benutzername und Kennwort im Connection-String an die Datenbank.

Schönes Wochenende ...

Grüße Uwe
Member: Dani
Dani Apr 04, 2014 at 15:43:28 (UTC)
Goto Top
Hallo Uwe,
auf dich habe ich eigentlich gezählt... face-wink

Übergebe Benutzername und Kennwort im Connection-String an die Datenbank.
Der Hersteller lässt dies leider nicht zu. Die Software liest einen System-DSN mit einem bestimmten Namen aus. Bei 50 Rechner würde sagen "Okay Jungs, heute klopfen wir die Dinger rein". Aber es geht um dreistellige Rechneranzahl, das ist schon Strafarbeit!


Grüße,
Dani
Member: colinardo
colinardo Apr 04, 2014, updated at Apr 05, 2014 at 07:33:15 (UTC)
Goto Top
Zitat von @Dani:
Der Hersteller lässt dies leider nicht zu. Die Software liest einen System-DSN mit einem bestimmten Namen aus. Bei 50 Rechner
würde sagen "Okay Jungs, heute klopfen wir die Dinger rein". Aber es geht um dreistellige Rechneranzahl, das ist
schon Strafarbeit!
was meinst du mit reinkloppen, wenn du im Dialog Username und Passwort eingibst gilt das Password nur zum Abfragen der weiteren Verbindungseigenschaften, wird dort abe nicht dauerhaft gespeichert, zumindest ist das hier bei mir so (steht aber auch hier).

Wenn du es brauchen kannst, habe den Dialog mal vor einiger Zeit mit AutoIT über die GUI automatisiert (Gilt für ein deutsches Windows 7):
#NoTrayIcon
$username = "Username"  
$password = "abcde"  

BlockInput(1)
RunWait("ODBCCONF.EXE /a {CONFIGSYSDSN ""SQL Server"" ""DSN=dsnname|Server=dbserver|Database=datenbank""}")  
Run("odbcad32.exe")  
WinWait("ODBC-Datenquellen","",10)  
WinActivate("ODBC-Datenquellen")  
ControlClick("ODBC-Datenquellen","","[CLASSNN:SysTabControl321]","left",1,194,31)  
sleep(500)
$listindex = ControlListView("ODBC-Datenquellen","","SysListView321","FindItem","dsnname")  
if $listindex <> -1 then
	ControlListView("ODBC-Datenquellen","","SysListView321","Select",$listindex)  
Else
	msgbox(0,"","Eintrag nicht gefunden")  
	BlockInput(0)
	exit 1
endif
ControlClick("ODBC-Datenquellen","","Button3")  
$entrydlgtitle = "Microsoft SQL Server DSN Konfiguration"  
WinWaitActive($entrydlgtitle)
ControlCLick($entrydlgtitle,"","Button2")  
WinWaitActive($entrydlgtitle,"",3)  
ControlCLick($entrydlgtitle,"","Button2")  
ControlSetText($entrydlgtitle,"","Edit1",$username)  
ControlSetText($entrydlgtitle,"","Edit2",$password)  
;ControlCLick($entrydlgtitle,"","Button4")  
ControlCLick($entrydlgtitle,"","Button6")  
WinWaitActive($entrydlgtitle,"",20)  
ControlCLick($entrydlgtitle,"","Button14")  
WinWaitActive($entrydlgtitle,"",3)  
ControlCLick($entrydlgtitle,"","Button23")  
WinWaitActive("ODBC Microsoft SQL Server Setup","",3)  
ControlCLick("ODBC Microsoft SQL Server Setup","","Button2")  
WinWaitActive("ODBC-Datenquellen","",3)  
ControlClick("ODBC-Datenquellen","","Button5")  
BlockInput(0)
Grüße Uwe
Member: Dani
Dani Apr 04, 2014 updated at 20:14:28 (UTC)
Goto Top
Guten Abend Uwe,
bei der manuelle Konfiguration legst du den DSN an, gibtst Server, Benutzer und Passwort an - fertig. Dieser gilt bei uns solange, bis jemand an der Konfiguration des DSNs etwas dreht.
Ich bin noch über diesen Beitrag gestoplert. Kann jemand was mit der letzten Antwort anfangen?

Sieht interessant aus... Danke schon mal. Wie zuverlässig war das Skript bei euch?


Grüße,
Dani
Member: colinardo
Solution colinardo Apr 05, 2014, updated at Jul 12, 2014 at 19:55:38 (UTC)
Goto Top
Zitat von @Dani:

Guten Abend Uwe,
bei der manuelle Konfiguration legst du den DSN an, gibtst Server, Benutzer und Passwort an - fertig. Dieser gilt bei uns solange,
bis jemand an der Konfiguration des DSNs etwas dreht.
stimmt muss mich da korrigieren, meine Test-VM hatte dann doch schon ne Macke, mal wieder Zeit um zum Snapshot zurückzukehren face-wink
Ich bin noch über diesen Beitrag gestoplert.
Kann jemand was mit der letzten Antwort anfangen?
ja, wenn das Programm eine FileDSN nutzen würde könntet ihr das Passwort in diesem *.dsn File hinterlegen:
http://msdn.microsoft.com/en-us/library/ms710900(v=vs.85).aspx
Der Connection-String sähe dann z.B. so aus:
FILEDSN=c:\myDsnFile.dsn;
Sieht interessant aus... Danke schon mal. Wie zuverlässig war das Skript bei euch?
Von 50 Maschinen hat es keine einzige nicht geschluckt ... trotzdem vorher natürlich anpassen(Zeile 6 u. 12) und testen...

Grüße Uwe
Member: Dani
Dani Apr 05, 2014 updated at 10:10:35 (UTC)
Goto Top
Guten Morgen Uwe,
war gestern wohl zu spät... wir haben es kopiert, angepasst und compiliert. Mehr noch nicht... Ich bin zur Zeit im Ausland, daher gebe ich es nur weiter. face-smile
Die Option als File wäre natürlich elegant, denn somit müssten wir die Datei in das Verzeichnis "x" kopieren und fertig. Gebe ich mal weiter...


Grüße,
Dani
Member: Dani
Dani Jul 12, 2014 at 19:54:53 (UTC)
Goto Top
Guten Abend Uwe,
Die Option als File wäre natürlich elegant, denn somit müssten wir die Datei in das Verzeichnis "x" kopieren und fertig. Gebe ich mal weiter...
Nach langem Nerven hat der Hersteller nachgegeben und hat die Option als File implementiert. Macht vieles einfacher...


Gruß,
Dani
Member: colinardo
colinardo Jul 12, 2014 at 20:14:04 (UTC)
Goto Top
Zitat von @Dani:

Guten Abend Uwe,
> Die Option als File wäre natürlich elegant, denn somit müssten wir die Datei in das Verzeichnis "x"
kopieren und fertig. Gebe ich mal weiter...
Nach langem Nerven hat der Hersteller nachgegeben und hat die Option als File implementiert. Macht vieles einfacher...
dann hat sich das 'Nerven' ja ausgezahlt face-smile

Schönen Abend
Grüße Uwe