1 Reply Latest reply on Jun 7, 2006 5:20 AM by Klaus Salger

    [SOLVED] System-DSN erstellen für SQL-Server mit SQL-Authentifizierung

    Andreas1 Apprentice

      Hallo NG,

      Ich habe folgendes Problem :
      Für ein Softwarepaket benötige ich einen Eintrag in der System-DSN...
      eigentlich kein großes Problem aber alle Versuche auch das Password für die
      SQL-Authentifizierung zu übergeben sind gescheitert.
      Ich verwende ein VB-Script um die System-DSN zu erstellen.
      in der VBS-Datei wird die Verbindung zuerst über die Registry - Einträge
      erstellt, danach wird
      eine Verbindung mit diesen Parametern hergestellt.
      Das Script läuft sauber durch nur das Password für die Verbindung wird
      nicht gespeichert.

      auch ein Spy brachte nichts.
      so sieht das VB-Script aus:

      Dim DataSourceName
      Dim DatabaseName
      Dim Description
      Dim DriverPath
      Dim DriverName
      Dim LastUser
      Dim Regional
      Dim Server
      Dim Password
      Const SystemFolder= 1
      Dim fso
      Dim SysFolder
      Dim SysFolderPath

      Set fso = wscript.CreateObject("Scripting.FileSystemObject")
      Set SysFolder =fso.GetSpecialFolder(SystemFolder)
      SysFolderPath= SysFolder.Path

      Set oArg= wscript.Arguments


      DataSourceName = oArg(0)
      DatabaseName = oArg(1)
      Description = "Gillardon"
      DriverPath = SysFolderPath & "\sqlsrv32.dll"
      Server = oArg(2)
      LastUser  = oArg(3)
      Password = oArg(4)
      DriverName = "SQL Server"
      Set WshShell = WScript.CreateObject("WScript.Shell")

      Dim RegEdPath
      RegEdPath= "HKLM\SOFTWARE\ODBC\ODBC.INI\" & DataSourceName & "\"
      WshShell.RegWrite  RegEdPath  , ""


      WshShell.RegWrite  RegEdPath & "Database" , DatabaseName
      WshShell.RegWrite  RegEdPath & "Description" , Description
      WshShell.RegWrite  RegEdPath & "Driver" , DriverPath
      WshShell.RegWrite  RegEdPath & "LastUser" , LastUser
      WshShell.RegWrite  RegEdPath & "Server" , Server
      WshShell.RegWrite  RegEdPath & "PWD" , Password
      WshShell.RegWrite  RegEdPath & "SafeTransactions" ,"00000000"
      ,"REG_DWORD"
      WshShell.RegWrite  RegEdPath & "UID" , LastUser

      WshShell.RegWrite "HKLM\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\" &
      DataSourceName , DriverName
      '
      Set conn = WScript.CreateObject("ADODB.Connection")
      strconn = "Provider=SQLOLEDB;Data Source ="&  Server & ";" &_
      "Inital Catalog =" & DatabaseName &";" &_
      "UID=" & LastUser & ";PWD="& Password & ";"
      conn.Open strconn

      da ich insgesamt 3 System-DSN's damit erstellen will habe ich das Script
      so variabel wie möglich ausgelegt...
      eine CMD ruft das Script auf und übergibt dann die einzelnen Parameter.
      Das klappt auch bis auf das Password.
      Hier hab ich schon mit PWD und Password selbst experimentiert aber bislang
      ohne Erfolg.

      hat da jemand eine Idee ?

      danke schon mal für die Antworten.

      Andreas Münzberg
      --
      Erstellt mit Operas revolutionärem E-Mail-Modul: http://www.opera.com/m2/
      ..
        • 1. Re: [SOLVED] System-DSN erstellen für SQL-Server mit SQL-Authentifizierung
          Klaus Salger Expert
          Hallo Andreas,

          mir stellen sich da 2 Fragen.

          1. Warum machst Du das per VBS, die Registry Keys könntest Du doch viel
          bequemer direkt per NetInstall setzen (RegModify)?

          2. Password? Was für ein Password? In der DSN gibt es kein Password.
          Auch wenn Du die SQL Server-eigene Authentifizierung benutzen willst ist
          ist für die Übergabe von Username und Password die Applikation
          zuständig, nicht die DSN.

          Auch im ODBC-Datenquellen Administrator hast Du nur an einer Stelle die
          Möglichkeit ein Paßwort einzugeben und dabei geht es nur darum, sofort
          Defaults für Konfigurationsoptionen von dem SQL Server zu holen. Dafür
          muss man sich natürllich auch authentifiziere. Nachdem man das Paßwort
          da einmal eingeben hat wird es aber nicht gespeichert und auch nicht für
          normale ODBC Connections verwendet.

          Also wie gesagt: Useraccount und Password in der Applikation, die die
          Verbindungen benutzt konfigurieren, nicht in der DSN.

          Ciao
          Klaus

          Andreas wrote:
          >
          > Hallo NG,
          >
          > Ich habe folgendes Problem :
          > Für ein Softwarepaket benötige ich einen Eintrag in der System-DSN...
          > eigentlich kein großes Problem aber alle Versuche auch das Password für die
          > SQL-Authentifizierung zu übergeben sind gescheitert.
          > Ich verwende ein VB-Script um die System-DSN zu erstellen.
          > in der VBS-Datei wird die Verbindung zuerst über die Registry -
          > Einträge  erstellt, danach wird
          > eine Verbindung mit diesen Parametern hergestellt.
          > Das Script läuft sauber durch nur das Password für die Verbindung wird
          > nicht gespeichert.
          >
          > auch ein Spy brachte nichts.
          > so sieht das VB-Script aus:
          >
          >    Dim DataSourceName
          >    Dim DatabaseName
          >    Dim Description
          >    Dim DriverPath
          >    Dim DriverName
          >    Dim LastUser
          >    Dim Regional
          >    Dim Server
          >    Dim Password
          >    Const SystemFolder= 1
          >    Dim fso
          >    Dim SysFolder
          >    Dim SysFolderPath
          >
          >    Set fso = wscript.CreateObject("Scripting.FileSystemObject")
          >    Set SysFolder =fso.GetSpecialFolder(SystemFolder)
          >    SysFolderPath= SysFolder.Path
          >
          >    Set oArg= wscript.Arguments
          >
          >
          >    DataSourceName = oArg(0)
          >    DatabaseName = oArg(1)
          >    Description = "Gillardon"
          >    DriverPath = SysFolderPath & "\sqlsrv32.dll"
          >    Server = oArg(2)
          >    LastUser  = oArg(3)
          >    Password = oArg(4)
          >    DriverName = "SQL Server"
          >    Set WshShell = WScript.CreateObject("WScript.Shell")
          >
          >     Dim RegEdPath
          >     RegEdPath= "HKLM\SOFTWARE\ODBC\ODBC.INI\" & DataSourceName & "\"
          >     WshShell.RegWrite  RegEdPath  , ""
          >
          >
          >    WshShell.RegWrite  RegEdPath & "Database" , DatabaseName
          >    WshShell.RegWrite  RegEdPath & "Description" , Description
          >    WshShell.RegWrite  RegEdPath & "Driver" , DriverPath
          >    WshShell.RegWrite  RegEdPath & "LastUser" , LastUser
          >    WshShell.RegWrite  RegEdPath & "Server" , Server
          >    WshShell.RegWrite  RegEdPath & "PWD" , Password
          >    WshShell.RegWrite  RegEdPath & "SafeTransactions" ,"00000000"
          > ,"REG_DWORD"
          >    WshShell.RegWrite  RegEdPath & "UID" , LastUser
          >
          >    WshShell.RegWrite "HKLM\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\" &
          > DataSourceName , DriverName
          > '
          > Set conn = WScript.CreateObject("ADODB.Connection")
          > strconn = "Provider=SQLOLEDB;Data Source ="&  Server & ";" &_
          >     "Inital Catalog =" & DatabaseName &";" &_
          >     "UID=" & LastUser & ";PWD="& Password & ";"
          > conn.Open strconn
          >
          > da ich insgesamt 3 System-DSN's damit erstellen will habe ich das
          > Script  so variabel wie möglich ausgelegt...
          > eine CMD ruft das Script auf und übergibt dann die einzelnen Parameter.
          > Das klappt auch bis auf das Password.
          > Hier hab ich schon mit PWD und Password selbst experimentiert aber
          > bislang  ohne Erfolg.
          >
          > hat da jemand eine Idee ?
          >
          > danke schon mal für die Antworten.
          >
          > Andreas Münzberg

          ..