2017-09-27 31 views
1

私はMSSql Dbを持っています。私のRedHatボックスでApacheを実行しているPHP7.1から接続しようとしています。私はsqlsrv & & pdo_sqlsrv拡張機能をインストールし、それらがphp.ini経由で存在することを確認しました。PHP経由でMS SQL Serverに接続できません

これは私が私の接続をテストするために使用しています小さなスクリプトです:

<?php 
    $serverName = "MY_IP_ADDRESS"; //serverName\instanceName 

    // Since UID and PWD are not specified in the $connectionInfo array, 
    // The connection will be attempted using Windows Authentication. 
    $connectionInfo = array("Database"=>"MY_DB", "UID"=>"MY_UID", "PWD"=>"MY_PWD"); 
    $conn = sqlsrv_connect( $serverName, $connectionInfo); 

    if($conn) { 
     echo "Connection established.<br />"; 
    }else{ 
    echo "Connection could not be established.<br />"; 
    die(print_r(sqlsrv_errors(), true)); 
    } 
?> 

これは、私はこのスクリプトあちこちに取得していますREPONSEです:

Connection could not be established. 
Array 
(
    [0] => Array 
     (
      [0] => HYT00 
      [SQLSTATE] => HYT00 
      [1] => 0 
      [code] => 0 
      [2] => [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired 
      [message] => [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired 
     ) 
    [1] => Array 
     (
      [0] => 08001 
      [SQLSTATE] => 08001 
      [1] => 10013 
      [code] => 10013 
      [2] => [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: Error code 0x271D 
      [message] => [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: Error code 0x271D 
     ) 
    [2] => Array 
     (
      [0] => 08001 
      [SQLSTATE] => 08001 
      [1] => 10013 
      [code] => 10013 
      [2] => [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. 
      [message] => [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. 
     ) 
) 

私は私ができるのtelnetで確認しました私のRedhatボックスからMSSqlサーバーに接続します。私がDBに接続できない理由についての手がかりは?

+0

これは、必ずしも問題がMSSQLサーバー上にあることを意味するのでしょうか、それともクライアント側に問題が残る可能性がありますか? – bos570

+0

このスクリプトは、コマンドラインまたはWebページから実行していますか? – miken32

+0

@ miken32 Webページ – bos570

答えて

0

のRedHat Linuxはデフォルトで有効になってSELinuxの保護が付属しています。 CLIからルートからこのスクリプトを実行できるということは、スクリプトがWebサーバーから正しく実行されないことを示しています。 Webサーバーにこの種のアクセスを許可するには、2つの設定を調整する必要があります。私は正直にこれを適用するかどうかはわからないけれども、それはあなたが、特にデータベースへのアクセスを許可する試すことができます動作しない場合

setsebool -P httpd_can_network_connect 1 

:Webサーバーは、独自のネットワーク接続を行うことができます最初にこれを試してみてくださいリモートのSQL Server:

setsetbool -P httpd_can_network_connect_db 1 

これらの作業のどちらであれば、あなたの監査ログを読んで、それを拒否なっている理由を見つけるためにaudit2whyツールを使用することをお勧めします。それはおそらくサーバー障害の問題です。


SELinuxを無効にすることをお勧めします。それをしないでください。それは理由のためにそこにあり、あなたのサーバーのための多くの保護を提供します。

+0

@ mike32ありがとうございました。すべての助けを感謝し、しばらくの間立ち往生していたでしょう。 – bos570

+0

問題ありません。あなたに提供されたものと異なる場合を除き、あなた自身の答えを投稿する必要はありません。 – miken32

+0

ええ、あなたのことを見てから数秒前に投稿しました。 – bos570

0

miken32のおかげで、私は最終的に解決策を見つけることができました。彼は、SELinuxによって接続が許可されていないかもしれないと指摘し、彼は正しいと言いました。私はdb接続を許可しなければならず、それは魅力的に機能しました。

デシベルの接続を許可する:

setsebool -P httpd_can_network_connect_db 1 
関連する問題