(SQL Server)SQLサーバの無人インストールとインストール後の各種設定設定 Part2
(SQL Server)SQLサーバの無人インストールとインストール後の各種設定設定 Part1の続きです。
■SQL Serverへのネットワークアクセス許可
SQL Server Express はインストール直後はセキュリティの問題で、ネットワーク越しのアクセスができないようになっています。
これだと意味がないので、TCPもしくは名前付パイプで外部からアクセスできるようにしてやる必要があります。
ネットなどを探してみると、SQL Server 構成マネージャー や SQL Server セキュリティ構成 を使って GUI で設定している方法はよく見かけるのですが、ユーザレスな CUI で設定する方法がなかなかありません。
で、結局たどり着いたのは下記の方法です。
MSDNを旅していると、SQL Serverには現在のデータベースエンジンの構成をXMLにインポート・エクスポートする機能があることが分かりました。(MSDN:SQL Server セキュリティ構成
その中にネットワークの設定(セキュリティ構成)もありました。
それで、一旦開発用DBの設定をSQL Server付属の sac ユーティリティを使ってエクスポートし、それをインポートさせることとしました。
SQL Serverの構成をエクスポートするのは下記のコマンドで可能です。
なお、sac.exe についてはMSDN:sac ユーティリティに詳しく載っています。
>"%ProgramFiles%\Microsoft SQL Server\90\Shared\sac.exe" out setting.xml -U sa -P 1234 -i MSSQLServer -DE
Exporting surface area settings for Database Engine instance VPC-XPHOME-SP2\MSSQLSERVER...Started
Exporting surface area settings for Database Engine instance VPC-XPHOME-SP2\MSSQLSERVER...Complete
ちなみに、エクスポートした XML は下記のようになっています。
version="1.0" encoding="utf-8"?>肝心なのは NamedPipes と TCPIP の value が ture か false かということですね。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>
xsi:type="Component">
> SqlServer>
> DatabaseEngine>
>
xsi:type="Instance">
> MSSQLSERVER>
>
> MSSQLSERVER>
> Auto>
> Running>>
> ....省略
>
>
xsi:type="Pair">
> NamedPipes>
xsi:type="xsd:boolean"> true>>
xsi:type="Pair">
> TCPIP>
xsi:type="xsd:boolean"> true>>
>
>
>
>
>
> 9.0.242.0>>
これが true になってると、ネットワーク越しのアクセスができるようです。
この XML をサイレンインストールした SQL Server に下記コマンドインポートします。(XML内のインスタンス名があっているか注意必要です。)
>"%ProgramFiles%\Microsoft SQL Server\90\Shared\sac.exe" in setting.xml -U sa -P 1234 -i MSSQLServer -DE
Importing surface area settings for Database Engine instance VPC-XPHOME-SP2\MSSQLSERVER...Started
Changes to Connection Settings will not take effect until you restart the Database Engine service.
Importing surface area settings for Database Engine instance VPC-XPHOME-SP2\MSSQLSERVER...Complete
上記でインポートした設定を適用するために、SQL Serverのサービスを再起動します。(サービスの指定には対象の SQL Server のインスタンス名を指定するっぽいです)
>net stop MSSQL$MSSQLSERVER
SQL Server (MSSQLSERVER) サービスを停止中です..
SQL Server (MSSQLSERVER) サービスは正常に停止されました。
>net start MSSQLSERVER
SQL Server (MSSQLSERVER) サービスを開始します..
SQL Server (MSSQLSERVER) サービスは正常に開始されました。
■ファイアウォールの設定
SQL ServerにクライントPCがアクセスできるようにWindows ファイアウォールのルール設定です。
サードパーティ製のファイアウォールが入ってる場合は…まあ、導入者自身でなんとかしてくれとしか言えないですね。
netsh firewall コマンドでSQL Serverが使う 1433 ポートを開放します。
なお、SQL Serverのインスタンス名が規定でない場合はポートが動的になるので、固定に変更するか、sqlservr.exeプロセスをルールに加えるかにしないといけませんね。(動的ポートを使うためにはSQL Server Browserサービスを動かしてないといけません。で、SQL Server BrowserにクライアントからアクセスできるようにするためUDP1434ポートを開放しないといけないみたいです。)
詳しくはSQL Server 2005でネットワーク接続を有効にするには?
netsh firewall add portopening protocol = TCP port = 1433 name = SQL_SERVER_EXPRESS
次回はアプリケーションで使うデータベースファイル(mdf)をSQL Serverにアタッチする方法です。