2012-03-07 23 views
2

私はperl DBIを使用してSQL Serverに接続しています。このサーバーはWindows認証を使用します。この情報をDBI経由でSQL Serverに渡すにはどうすればよいですか?Perl DBI:Windows認証を使用するSQL Serverに接続する

+0

どのようなサーバーですか?こちらもご覧ください: http://stackoverflow.com/q/202962/1030675 – choroba

+0

MS SQL Server。問題は、Windows認証を使用する必要があり、ユーザー名とパスワードは使用しないことです – Aks

答えて

2

「Windows認証を使用する」とは、スクリプトがWindows上で実行されることを意味します。その後、TIMTOWTDI。あなたの代わりにODBCのADOを使用することができますし、DSNを作成する必要はありません。

my $db_instance = ".\\SQLEXPRESS"; 
    my $db_name  = "AdventureWorks"; 
    my $db_user  = "sa"; 
    my $db_pass  = "..."; 

    my $n = 0; 
    for my $cs (
     "DBI:ODBC:Driver={SQL Server};Server=$db_instance;Database=$db_name;UID=$db_user;PWD=$db_pass" 
    , "DBI:ODBC:Driver={SQL Server};Server=$db_instance;Database=$db_name;" 
    , "DBI:ODBC:DSN=AdvWork;" 
    , "DBI:ADO:DSN=AdvWork;" 
    , "DBI:ADO:Provider=SQLNCLI.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=$db_name;Data Source=$db_instance;" 
    , "DBI:ADO:Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;PWD=$db_pass;Initial Catalog=$db_name;Data Source=$db_instance;" 
    , "DBI:ADO:Provider=SQLNCLI10.1;Integrated Security=SSPI;Persist Security Info=False;User ID=\"\";Initial Catalog=$db_name;Data Source=$db_instance;Initial File Name=\"\";Server SPN=\"\";" 
) { 
    my $dbh = DBI->connect($cs) or die("\nCONNECT ERROR:\n$DBI::errstr"); 
    my $wtf = $cs; 
    $wtf =~ s/$db_pass/secret/; 
    printf "%2d CS: '%s'\n", ++$n, $wtf; 
    $dbh->disconnect(); 
    } 

出力:

xpl.pl::Main started using Perl 5.010000 on MSWin32. 
will call CnctMSSS - connect to MS SQLServer (SQLExpress) 
1 CS: 'DBI:ODBC:Driver={SQL Server};Server=.\SQLEXPRESS;Database=AdventureWorks;UID=sa;PWD=secret' 
2 CS: 'DBI:ODBC:Driver={SQL Server};Server=.\SQLEXPRESS;Database=AdventureWorks;' 
3 CS: 'DBI:ODBC:DSN=AdvWork;' 
4 CS: 'DBI:ADO:DSN=AdvWork;' 
5 CS: 'DBI:ADO:Provider=SQLNCLI.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Advent 
ureWorks;Data Source=.\SQLEXPRESS;' 
6 CS: 'DBI:ADO:Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;PWD=secret;Initial Catalog=Adventur 
eWorks;Data Source=.\SQLEXPRESS;' 
7 CS: 'DBI:ADO:Provider=SQLNCLI10.1;Integrated Security=SSPI;Persist Security Info=False;User ID="";Initial C 
atalog=AdventureWorks;Data Source=.\SQLEXPRESS;Initial File Name="";Server SPN="";' 
CnctMSSS returned 0 [5.858424 secs] 
xpl.pl::Main done. (0) 

あなたは[this contributionに基づく](1)を比較し、(2)の場合は、ユーザー情報をスキップするだけでデータベースに接続することができます。ドライバ/プロバイダによっては「Integrated Security = SSPI」の追加が好きかもしれません。

Hereは、接続文字列を試すのに役立つ必要がある場合は、良い出発点です。

1

DBD :: ODBCを使用しているとします。 Windows認証を使用するODBCアドミニストレータでSQL Server用のデータソースを作成し、ユーザー名とパスワードなしでDBIのconnectメソッドを呼び出します。

関連する問題