我希望在我的PHP网站上打印出基本的"SELECT * FROM Kunde"
。
收到以下错误:
Array([0] => Array([0] => 42000 [SQLSTATE] => 42000 [1] => 229 [代码] => 229 [2] => [Microsoft] [用于SQL Server的ODBC驱动程序17] [SQL 服务器]对对象'Kunde'的SELECT权限被拒绝, 数据库“ Test_DB”,架构“ dbo”。 [消息] => [Microsoft] [ODBC驱动程序 17 for SQL Server] [SQL Server]对SELECT权限被拒绝 对象“ Kunde”,数据库“ Test_DB”,模式“ dbo”。 )
系统:安装了Win2016,SQL Server 2017,PHP 7.4.3,sqlsrv模块和odbc 17,连接到sql server succesfull,sql查询(SELECT * FROM Kunde
)在SSMS中有效,我为自己授予了所有可能的权限可能的SQL对象...
Edit1:
<?php
// Create connection
$servername = "servername\SQLEXPRESS";
$dbname = "Test_DB";
$connectionInfo = array( "Database"=>"Test_DB");
$conn = sqlsrv_connect($servername, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
if( $client_info = sqlsrv_client_info( $conn)) {
foreach( $client_info as $key => $value) {
echo $key.": ".$value."<br />";
}
}
echo "<br>";
$server_info = sqlsrv_server_info( $conn);
if( $server_info )
{
foreach( $server_info as $key => $value) {
echo $key.": ".$value."<br />";
}
} else {
die( print_r( sqlsrv_errors(), true));
}
echo "<br>";
//Show DB
$sql = "SELECT * FROM dbo.Kunde";
$stmt = sqlsrv_query($conn, $sql);
if( $stmt === false ) {
die( print_r( sqlsrv_errors(), true));
}
sqlsrv_close( $conn );
?>
答案 0 :(得分:0)
您正在尝试使用windows
身份验证连接到SQL Server。在这种情况下,将使用Web服务器的进程标识或线程标识(如果Web服务器正在使用模拟)来连接到服务器。在客户端工具(SQL Server Management Studio)中执行此语句时,您使用的是最终用户的身份。
您需要执行以下操作:
sql
身份验证连接到SQL Server 使用此简单脚本,您可以获得尝试连接到服务器的用户名:
<?php
$server = 'servername\SQLEXPRESS';
$cinfo = array(
"Database"=>'Test_DB'
);
$conn = sqlsrv_connect($server, $cinfo);
if( $conn === false )
{
echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
exit;
}
$sql =
"SELECT 'SUSER_SNAME' AS [NAME], CONVERT(nvarchar(128), SUSER_SNAME()) AS [VALUE]".
"UNION ALL ".
"SELECT 'SUSER_NAME' AS [NAME], CONVERT(nvarchar(128), SUSER_NAME()) AS [VALUE]".
"UNION ALL ".
"SELECT 'USER_NAME' AS [NAME], CONVERT(nvarchar(128), USER_NAME()) AS [VALUE]".
"UNION ALL ".
"SELECT 'USER_ID' AS [NAME], CONVERT(nvarchar(128), USER_ID()) AS [VALUE]";
$stmt = sqlsrv_query($conn, $sql);
if( $stmt === false ) {
echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
exit;
}
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
echo $row['NAME'].": ".$row['VALUE']."</br>";
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>