Q18:SQL SERVER 2000を利用しているのですが、ローカルのDB接続をする際、Windows認証で繋ぐことはできますか?
Q18-1:
ローカルDBと接続を図りたいのですが、接続ができません。
※以下のような接続指定
ドライバ:com.microsoft.sqlserver.jdbc.SQLServerDriver
サーバー:jdbc:sqlserver://(local):1433;
ユーザ:test
パスワード:test
A18-1:
かつてはMicrosoftのJDBCドライバーを使ってのWindows認証接続はできなかったのですが、Microsoft SQL Server 2005 JDBC Driver 1.1からは可能になったようです。
詳細につきましては、下記URL「MSDNライブラリ」内ページをご覧下さい。
http://msdn2.microsoft.com/ja-jp/library/aa342325.aspx
接続文字列等変更の必要があります。
大変申し訳ございませんが、まだこちらで接続を検証しておりませんので、詳細については、再度ご連絡申し上げます。
以下の手順をお試し下さい。
@SQL Server 2005 JDBC Driver 1.1をダウンロードしてできるフォルダ内から
「sqljdbc_1.1\jpn\sqljdbc.jar」と
「sqljdbc_1.1\jpn\auth\x86またはX64¥sqljdbc_auth.dll」を
Java 実行環境下にコピーします。
MZPlatform下のJava 実行環境をお使いの場合は
「MZPlatform\Java\jre6\lib\ext」フォルダ内です。
A[データベースアクセス]コンポーネントの「メソッド:データベースに接続する」の引数は以下のようになります。
ドライバ名:com.microsoft.sqlserver.jdbc.SQLServerDriver
データベースのURL:jdbc:sqlserver://localhost;integratedSecurity=true;
ユーザ名:(必須)
パスワード:(必須)
とします。
<ポート番号省略時:1433に接続>
例えばサンプルアプリケーションのデータベースアクセス.mzaxで接続する場合、
サーバ名:jdbc:sqlserver://localhost;
データベース名:databaseName=データベース名;integratedSecurity=true;
などとテキストフィールドに入力します。
<databaseName省略時には、SQLServer側で設定されているデフォルトデータベースに接続>
ユーザ名は「ドメイン名(またはマシーン名)\ユーザ名」がデフォルトのようですが、ローカルホスト上のDBの場合、ユーザ名だけで認証されました。
なお、SQLServer2000にはサービスパックを当てないとうまく接続できません。
Q18-2:
sqljdbc_auth.dll
sqljdbc.jar
のファイル2個をコピーし、SQLServer2000のサービスパック(SP4)を当てましたが、 Exceptionホストにtcp/ip接続できませんでした。
「java.net.connectException: Connection refused Connect」というエラーが表示され、実行できませんでした。
(※ サンプルアプリケーションのデータベースアクセス.mzaxを使用)
サーバー名:jdbc:sqlserver://localhost;
データベース名:databaseName=master;integratedSecurity=true;
ユーザー名:testuser
パスワード:testpass
他に考えられる要因、解決方法はありますでしょうか?
A18-2:
原因としてまず考えれられるのは以下の2点です。
SQLServerネットワークユーティリティーから確認して
@TCP/IPプロトコルが有効になっていない
A「プロトコル暗号化を設定する」が有効になっている
デフォルトで「TCP/IP接続」と「名前付きパイプ」が有効になっているはずですので、@の確率は低いかも知れませんがご確認下さい。
(SQLServer2005の場合、リモート接続からはTCP/IP接続のみが推奨されています)
SQLServer2000の場合は両方有効になっていても、取敢えず接続できるようです。
「プロトコル暗号化を設定する」を有効にして、何も設定をしていない場合も、同じエラーメッセージが出ます。
SSL暗号化を使用する場合、更にそのための設定が必要です。
Q18-4:
昨日の件で、ファイアウォールの設定を行ったのですが、接続できませんでした。
現状を報告いたします。
SQLServerは、SQL Server 2000 Personal Editionを使用しています。
(標準セットアップ 承認設定・・・Windows認証???)
私のパソコンから、外部のSQLServerには、SQLServer認証で接続できました。
しかし、私のパソコン上の、ローカルに存在している、SQLServerは、SQLServer認証、WINDOWS認証と共に接続できませんでした。
やはり、この現状をみて、こちらのSQLServer側の設定がまずいのでしょうか。
A18-4:
大変お手数ですが、他のPCのSQLServerツール等からも接続できるかお試し頂けないでしょうか。
まずは、Windows認証のままですとアカウント等の関係で煩雑になりますので、SQLServer2000の認証モードを混合モードに変更します。
1)MicrosoftSQLServer>EnterpriseManagerを立ち上げます。
2)(local)サーバーが登録されているか確認します。登録されていない場合は3)の手順を実行します。
3)「SQLServerグループ」アイコンの上で右クリック>SQLServerの新規登録を選びます。ウィザードに従って、設定します。
4)(Local)サーバーのアイコンの上で右クリック>プロパティ(R)を選び設定画面を出します。設定画面の「セキュリティ」タブを選び、認証モードを混合モードに変更します。
5)SQLServerを再起動します。
確認方法は以下のものがあります。
できましたら、自機、他機両方からお試し下さい。
1)MicrosoftSQLServer>クエリアナライザーで接続
2)コマンドプロンプトで osql -S PC名 -U sa -P パスワード を実行
(1>と表示されれば接続されている)
3)telnet PC名 1433
(他機からはファイアーウォールの関係ではじかれるかもしれません)
以上お試し頂いて、接続が全くできない場合にはSQLServer側の設定によるもの、接続に問題がなければJDBCドライバー設定によるところが大きいとの判断ができるかと存じますので、大変お手数ですが、お試し頂ければ幸いです。
Q18-5:
処理の件なのですが、先ほど、再度、サービスパック(SP4)を入れなおして、設定を加えたところ、きちんと処理することが出来ました。
A18-5:
補足なのですが、MZPlatform\Java\j2re1.4.2_03\lib\ext下に入れて頂いた2つのSQLServer用のJDBCドライバファイルのアクセス許可は、適宜利用状況に合わせて変更をお願い致します。
例えばアドミニストレータ権限のWindowsアカウントでダウンロードしたJDBCドライバファイルを他の一般ユーザーアカウントで利用しようとすると、利用できず、そのファイルまでのパスが通っていないような状態になってしまいます。