我正在使用perl DBI连接到SQL Server。此服务器使用Windows身份验证。如何通过DBI将此信息传递给SQL服务器?
答案 0 :(得分:2)
我认为“使用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)[基于this contribution]和(2),您会发现跳过用户信息足以连接到数据库;一些驱动程序/提供商可能喜欢添加“集成安全性= SSPI”。
Here是一个很好的起点,如果您需要帮助来尝试连接字符串。
答案 1 :(得分:1)
我认为您正在使用DBD :: ODBC。在ODBC管理器中为使用Windows身份验证创建SQL Server的数据源,然后在没有用户名和密码的情况下调用DBI的connect方法。