- PR -

SQL Server 2000に接続失敗

1
投稿者投稿内容
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-03-05 13:53
こんにちは

症状:
SQL Server2000に接続エラー

稼働環境:
SQL Server 2000 の Development Edition(Japanese January 2001)

OS: Win 2000 5.00.2159 Service Pack1
(Win 2000 サーバーではありません)

WEBサーバー:TOMCAT4.0

SQL Server 2000 とTOMCAT4.0は
同一PC(IKAWABE)上インストールして利用しています。


CODE(Javabeans):
<************************************
url = "jdbc:microsoft:sqlserver://IKAWABE:1433/Northwind";
user = "cat";
password = "tom";

connection = DriverManager.getConnection(url, user, password);
*************************************>

ERORR:
<************************************
HTTP Status 500 - Internal Server Error
type Exception report

message Internal Server Error
description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.

exception

javax.servlet.ServletException:
[Microsoft][SQLServer JDBC Driver]Unable to connect.Invalid URL.
at org.apache.jasper.runtime.PageContextImpl.handlePageException(Unknown Source)
at org.apache.jsp.input$jsp._jspService(input$jsp.java:137)

*************************************>

ご存知の方助けていただけませんか。

宜しくお願いします

isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-03-05 14:54
追伸:
JDBCはMicrosoftのType4です(↓)。

mssqlserver.jar
msbase.jar
msutil.jar

宜しくお願いします
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-03-05 15:00
> url = "jdbc:microsoft:sqlserver://IKAWABE:1433/Northwind";

コード:
url = "jdbc:microsoft:sqlserver://IKAWABE:1433;DatabaseName=Northwind";


ではいかがでしょう。
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-03-05 15:34

NothingBut.NETFXさん
すごーい!

> url = "jdbc:microsoft:sqlserver://IKAWABE:1433;DatabaseName=Northwind";
>ではいかがでしょう。
効いてます!
ありがとうございます。

今のCODE:
<*******************************
url = "jdbc:microsoft:sqlserver://IKAWABE:1433;DatabaseName=Northwind";
user = "cat";
password = "tom"; // catの所属のloginアカウンタのpasswordを継承使用

connection = DriverManager.getConnection(url, user, password);
********************************>

後一歩のところに来ています。
今度の
ERORR:
<*************************************
javax.servlet.ServletException: [Microsoft][SQLServer JDBC Driver][SQLServer]ユーザー 'JobAdminApp' のログインに失敗しました。理由 : SQL Server の信頼関係接続に関連付けられていません。
**************************************>

TCP/IPで同じPC上のMS SQL Server 2000に接続(MS SQL Server 2000 Driver For JDBC Type4 )しようとしているので、
そもそも"信頼関係接続"(Windows 認証)なんて選択していない(SQL Server認証にした)のに
何でこなエラーが出るのでしょうか。

またよろしくお願いします。
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-03-05 16:31
訂正:
ERORR:
<*************************************
javax.servlet.ServletException: [Microsoft][SQLServer JDBC Driver][SQLServer]ユーザー 'cat' のログインに失敗しました。理由 : SQL Server の信頼関係接続に関連付けられていません。
**************************************>
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-03-05 18:59
SQL Serverのセキュリティ設定(認証モード)は、混合モードになっていますか?デフォルトではWindows認証が選択されますが?
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-03-06 16:58
お疲れ様です。

私も疲れました。

皆さんのお陰で"一応"
MS JDBC(Type4)でMS SQL Server 2000への接続は
成功しました!

特にサンプルコードまで作って下さった方に厚くお礼を申し上げたいです。

**********************************
1.認証の選択操作が不十分だった。
**********************************
Windows認証か、SQLServer認証かの選択は
まず一番目の認証設定
「SQL Server Enterprise Manager」にて、
DBMSレベルのセキュリティフォルダ下の「ログイン」を開いて
その中に自分が追加したログイン・アカウンタのインスタンス名を右クリックして、
プロパティの[全般]タブで
認証の選択のところに"SQL Server認証"にチェックを付けること。
ここでログイン・アカウンタインスタンスのpasswordの設定も行う。
(これは私はやりました)

続いて二番目の認証選択の設定も必要!
今度は「SQL Server Enterprise Manager」の「ツール」メニューを開いて、
「SQL Server環境プロパティー」に行き、[セキュリティ]タグで
「認証:」の所に
”混合モード認証”にチェックを入れる(デフォルトは”Windows 認証”に要注意)
これがヤラナカッタ!

ロジックからすれば、二番の設定は一番名の設定の前提条件となるような感じですね。
即ちよりハイレベル(MS SQL Server 2000 全般)”混合モード認証”でなければ、
特定のログイン・アカウンタのインスタンスに対して
"SQL Server認証"をチェックを付けても効かないはず。
(だとすれば、デフォルトでSQL Server 2000 全般において
”Windows 認証”となっている以上、何で一番目の設定のところに
"SQL Server認証"を選択できるのだろう?!)

ここで私は罠にかかった。

**********************************
2.もう一つの罠----URLの形式問題
**********************************
接続メソッドに関して
MS SQL Server 2000 Driver for JDBC の中に二つ形式の文が有りました:
1) DriverManager.getConnection("jdbc:microsoft:sqlserver://server1:1433","username","secret");
2) Connection conn = DriverManager.getConnection ("jdbc:microsoft:sqlserver://server1:1433;User=test;Password=secret");

どっちでもいいかなと思い込んだが、1)は使えなかった。

**************************************************
3.もっと巧みな罠------URL引数中のUserとは何か?
**************************************************
getConnectionの中のDBName引数と並んでいるのだから、
「SQL Server Enterprise Manager」において、
設定しているDBのユーザーであるのは当然だと思い込んでいた。

これも間違った!

これはDBレベルの”ユーザー”ではなくて
”SQL Server グループ”レベルの[セキュリティ]の”ログイン”のインスタンス名だ!!

=======================
ということで
皆さんに報告いたします。

(これからは本格な戦いだ。このSQL Server と! 味方にしてください)
1

スキルアップ/キャリアアップ(JOB@IT)