我能够连接到我的 MSSQL 服务器,但在尝试查询数据库时出现权限错误。我在下面的脚本中看到“YAY”,但收到此错误:
*[Microsoft][ODBC SQL Server Driver][SQL Server]The SELECT permission was denied on the object 'TICKET_TYPES', database 'DBNAME', schema 'dbo'. (SQL-42000)(DBD: st_execute/SQLExecute err=-1)*
如果我添加具有 DBO 访问权限的“DOMAIN\DOMAIN Users”,它可以工作,但是当我把它拿走时,它就不行了。我认为它以登录用户身份连接到数据库,而不是在连接字符串中设置但不是肯定的 SQL 用户。
SQL 驱动程序设置为使用“使用登录 ID 进行 SQL Server 身份验证...”而不是“Windows NT...”
经典的 ASP 连接和查询很好。我可以通过 ASP 经典和 SQL Server Management Studio 使用连接字符串中的 SQL 帐户访问/查询数据库。
它可能也适用于 SQL2005,但不是我们尝试升级到的 SQL2008,这可能是相关的。除了我们的几个 Perl 脚本没有进入表格之外,我们的升级一切都很好。
use lib "cgi-bin";
use DBI;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
require "Babel.pm";
my $y = new Babel;
my $q = new CGI;
$SERVER_N = $q->server_name() ;
### CONNECT
$database = "DBNAME";
$dbusername = "SQLUSERNAME";
$dbpassword = "SQLUSERPASSWORD";
$server="SQLSERVERIP";
print "Content-type: text/html\n\n";
$dbh = DBI-> connect( "DBI:ODBC:driver={SQL Server};
Server=$server;
Database=$database;
UID=$dbusername;
PWD=$dbpassword") || die &DBerror;
if ($DBI::errstr) {print "Error: Connecting to the Database!";
exit;}else{
print "YAY! <br><br>";
}
### END: CONNECT
$v2SQL = "select distinct ROUTE from TICKET_TYPES";
$css1 = $dbh->prepare ($v2SQL);
$css1->execute () || print $css1->errstr;
while ((@row) = $css1 ->fetchrow_array) {
$MANA = @row[0];
print "$MANA";
}
$css1->finish () || print $css1->errstr;