2017-06-08 17 views
1

MsSQLに接続できませんでした。 エラーメッセージ:PHP経由でMSSQLに接続できません

SQLSTATE: HYT00 

Code: 0 

Message: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired 

SQLSTATE: 08001 

Code: 10057 

Message: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: Error code 0x2749 

SQLSTATE: 08001 

Code: 10057 

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. 

OS:Ubuntuの16.04

は私がguideに応じて必要なすべてのドライバをインストールしました。

try { 
    $conn = new PDO ("sqlsrv:Server=host.com\instance; Database = DBName",NULL,NULL); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e){ 
    die(print_r($e->getMessage())); 
} 

Windows NT認証を使用していたので、私はユーザー名とパスワードを空白にしました。

本当に助けが必要です!!!!

ありがとうございます!

+0

Kerberosを使用していますか?あなたのクライアントがUbuntuかあなたのサーバかどうか確認してください。 –

+0

私のWebサーバーはUbuntuです。 WebはリモートのUbuntu VMでホストされています。それから私は今私のローカルマシンからウェブサイトにアクセスしようとしています。 Webサイトをロードするとき、バックエンドは別のリモートデータベースサーバーと通信する必要があります。ウェブサイトとの接続は良好ですが、ウェブサイトのバックエンドからデータベースへの接続は失敗します。 –

答えて

1

私はあなたを提供することができますベスト(とだけリンクを提供するリスクのある)は、次のMSDNの記事です:SQL Server Driver for PHP: Understanding Windows Authentication

はここでおそらく最も興味深い作品だ:

(続き私の仕事ではありません、しかし、ブライアン・スワンさん)

しかし、どのようなアイデンティティが接続 試みで使用されていた理解が混乱しました。私の混乱を解消する助けとなったことは、 これを学んでいました。サーバーに接続するために使用されるIDは、常に がPHPが動作しているプロセスのアイデンティティになります。それは ビットが単純化されている可能性があります(偽装はプロセスに一時的に別のIDを使用することを許可します)。しかしこれを理解することで を転送することができました。いくつかの掘り下げといくつかの実験の後で、 で使用しようとしているIDを知るために2つの質問に答える必要がありました。

1)IISの認証モードは何ですか? (匿名認証?Windows認証?両方)

2)FastCGIモジュールの偽装はオンまたはオフですか? (?つまり、0または1に設定私のphp.iniファイルで fastcgi.impersonate設定し)

は、ここで私が見つけたものです:

A. IIS匿名認証が有効になっており、fastcgi.impersonate = 1:匿名でIISに接続していたため、匿名の アカウント(既定ではIIS 7.0+ではNT AUTHORITY \ IUSER)が になりました。したがって、この身元確認 が私のサーバ上の有効なログインにマップされないため、私の接続は失敗しました。

B. IIS匿名認証が有効になっており、fastcgi.impersonate = 0:ため 偽装がオフだった、私のアイデンティティは PHPプロセスのIDとして使用されませんでした。その代わりに、PHPプロセスの実際のIDは接続試行で でした。 IIS 7.5では、PHPプロセスのIDは で、実行されているアプリケーションプールのIDによって異なります。 このケースでは、PHPが既定のアプリケーションプールにあり、接続試行で使用されたID がIIS APPPOOL \ DefaultAppPoolでした(したがって、 接続に失敗しました)。この資料では、異なるバージョンのIISとアプリケーションのIDについての詳細情報 を提供しています。Who は私のIISアプリケーションプロセスIDですか?

C. IIS Windows認証が有効になっており、fastcgi.impersonate = 1:私のWebブラウザは\マイクロソフト(下 を実行していたIDでIISに接続されたI 、Windowsの 認証が有効(または無効匿名認証)で brian.swan、私がログインしたアイデンティティ)。また、 が偽装されていると、PHPプロセスはMicrosoft \ brian.swan のIDで実行されました。したがって、私の サーバの有効なログインにそのアイデンティティがマップされているので、私の接続は成功しました。

D. IIS Windows認証は= 0を有効にしてfastcgi.impersonate:ここでの結果は、匿名認証が有効と fastcgi.impersonate = 0と同じであった(接続の試みが失敗しました)。唯一の の違いは、Webサーバーからページを要求したときに発生しました。 ポップアップウィンドウで、ページを要求したときに自分の身元を尋ねました。

E.Both匿名とWindows認証が有効になって: Webブラウザは 最初に匿名認証を使用してWebサーバーにアクセスしようとします。 したがって、匿名認証とWindows認証の両方が有効な場合、 の結果は、匿名認証 が有効な場合(AとB)の場合と同じ結果になります。これに関する詳細は、IIS がWebブラウザクライアントを認証する方法を参照してください。

+0

ここに私が直面している状況です。私が接続しているMS SQLサーバは、NT認証を使用しています。では、データベースに接続するための設定はありますか?どうもありがとう。 –

+0

私の更新された回答を参照 –

+0

ありがとうございます。この投稿は本当に役に立ちます。 –

関連する問題