Thread DBI connect mit SSPI Windows authentication (6 answers)
Opened by Gustl at 2012-10-22 11:43

thomas38
 2012-11-04 22:14
#163044 #163044
User since
2012-11-04
30 Artikel
BenutzerIn
[default_avatar]
Ja, das ist möglich.
Ich nehme an, dass der unter Windows aktuell angemeldete Benutzer eine Verbindung zu einem MSSQL-Server aufbauen möchte, ohne das Benutzername/Passwort nochmals übergeben werden muss (deshalb SSPI).

Deine Fehlermeldung lässt darauf schließen, dass der SQL-Server von einer anonymen Anmledung ausgeht. Akzeptiert der SQL-Server überhaupt Windows-Authentifizierung? Das kann man beim SQL-Server konfigurieren.
Als Test solltest Du zuerst als dem selben Benutzer versuchen, mit dem "Microsoft SQL Server Management Studio" eine Verbindung (mit Windows Authentifizierung) mit dem SQL-Server herzustellen.

Wenn der SQL-Server nur SQL-Server Authentifizierung erlaubt, sind Benutzername/Passwort auf jeden Fall notwendig. SSPI funktioniert dann nicht.

Ich habe den Verbindungsaufbau mit SSPI ausprobiert.
Der SQL-Server ist bei mir auf dem selben Computer, auf dem auch das Perl Programm gestartet wird.


Beispielprogramm:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/perl

# odbc.pl
# Testprogramm zum Aufbau einer Verbindung zu einem
# MS SQL-Server mit SSPI

use strict;
use warnings;

use DBI;

my $server="."; ## MS SQL-Server auf lokalem Computer
my $database="master";
my $dsn="dbi:ODBC:DRIVER={SQL Server};Server=$server;database=$database;Integrated Security=SSPI;";

my $sql = "sp_who"; ## Prozedur, die Sitzungen ausgibt
## als normaler Benutzer werden nur die eigenen Sitzungen ausgegeben
my $dbh;
my $sth;
my $erg;


print "Verbindung zur Datenbank '$database' auf '$server' wird hergestellt ...\n";

$dbh = DBI->connect($dsn) or die "VERBINDUNGSAUFBAU FEHLGESCHALGEN! ABBRUCH";

$sth=$dbh->prepare($sql) or die "PREPARE('$sql') FEHLGESCHLAGEN! ABBRUCH";
$erg=$sth->execute or die "EXECUTE('$sql') FEHLGESCHLAGEN! ABBRUCH";

while (my @row = $sth->fetchrow_array)
{
no warnings;
@row=map { s/\s*$// ; $_ } @row ; ## Leerzeichen am Ende entfernen
use warnings;
if ($row[3] ne "sa" ) ## Benutzer "sa" ignorieren
{
# status, loginname, hostname, dbname und cmd ausgeben
print "ROW: ", join(", ",@row[2,3,4,6,7]), "\n";
}
}
$sth->finish;

print "ENTER zum Beenden des Programms\n";
$erg=<STDIN>;

print "Verbindung wird geschlossen ...\n";
$dbh->disconnect if defined $dbh;


Ausgabe des Beispielprogramms:
Quote
C:\bin>odbc.pl
Verbindung zur Datenbank 'master' auf '.' wird hergestellt ...
ROW: runnable, RTJ13\thomas, RTJ13, master, SELECT
ENTER zum Beenden des Programms

Verbindung wird geschlossen ...


Wie man sieht, führt der Benutzer "RTJ13\thomas" von PC "RTJ13" auf der Datenbank "master" ein "SELECT" aus. Das "SELECT" wird durch die stored procedure "sp_who" ausgeführt.

Wahrscheinlich wird der Verbindungsaufbau nicht funktionieren, wenn der SQL-Server auf einem anderen Computer ausgeführt wird, und die PCs nicht Mitglied einer Windowsdomäne sind.
Last edited: 2012-11-04 22:21:05 +0100 (CET)

View full thread DBI connect mit SSPI Windows authentication