Perl DBI: подключение к SQL Server, использующему проверку подлинности Windows - PullRequest
2 голосов
/ 07 марта 2012

Я использую Perl DBI для подключения к SQL Server.Этот сервер использует проверку подлинности Windows.Как передать эту информацию на сервер SQL через DBI?

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Я предполагаю, что «использование аутентификации Windows» подразумевает, что ваш скрипт работает в Windows. Тогда есть более чем один способ сделать это. Вы можете использовать ADO вместо ODBC и не создавать 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)

Если вы сравните (1) [на основе этого вклада ] и (2), вы увидите, что пропуска информации о пользователе достаточно для подключения к базе данных; некоторым драйверам / поставщикам может понравиться добавление «Integrated Security = SSPI».

Здесь является хорошей отправной точкой, если вам нужна помощь в экспериментах со строками подключения.

1 голос
/ 07 марта 2012

Полагаю, вы используете DBD :: ODBC.Создайте источник данных для SQL Server в администраторе ODBC, который использует проверку подлинности Windows, затем вызовите метод подключения DBI без имени пользователя и пароля.

...