スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SQL Server 2008 R2 SP3 Express Edition のサイレントインストール

SQL Serve サイレントインストール



【一目で分かる、SQL Server 2005~2014とService Packのサポート終了時期】 にあるように、
SQL Server 2008 R2、SP1、SP2については、既にMicrosoftのサポートは終了している。
いわば、脆弱性が発見されても、セキュリティ更新プログラムの提供が行われていない状態というわけだ。

ここ数年増加しているSQLインジェクションに対する防御が弱くなる為、
新たな脆弱性がみつかればひとたまりも無いだろう。

とはいえ、SQL Server 2008 R2 Express Editionのような無償のデータベースは、
利用者が意図せずしてアプリケーション側から利用されている場合が多く、
実際に攻撃されるなどの被害を受けない限り、
Microsoftのサポートうんぬんについてはわからないのではないだろうか。

そう考えると、アプリケーション開発元(ベンダー)の責任において、
正しくバージョンアップやサービスパックなどの適用を行わなければいけない。


これについては、
SQLインジェクションが原因でクレジットカード情報が7316件、
クレジットカード情報を含まない個人情報が9482件漏洩した事故に対するIT訴訟が証明している。

東京地裁 判例 平成26年1月23日判時2221号71頁

要は、経産省やIPAが個人情報漏洩対策に注意喚起をし、
SQLインジェクションに際しての「バインド機構の使用又はエスケープ処理を施したプログラム」が推奨されており、
セキュリティ対策についてX社からの指示はなかったが、Y社は必要なセキュリティ対策を講じる義務(債務)があり、それを怠った債務不履行があるというもの。
(※ X株式会社: インテリア商材の通信販売を営む(原告)、Y株式会社: システム開発の会社(被告))



SQL Serve サイレントインストール


ということで、最新のサービスパックを適用させたインストールパッケージを作成しようと思う。

しかし、以前書いた【SQL Server 2008 R2 SP2 Express Edition のサイレントインストール】にあるように、
InstallShield を使用するか、ブートス トラップ アプリケーションによって SQL Server をインストールしようとすると、
エラーが発生しインストール プロセスが停止するといった不具合があったため、
SQL Server 2008 R2 SP3 Express Editionについても動作検証および、プログラムの修正が必要でした。


動作検証は、Windows 7(32/64ビット)、Windows 8(32/64ビット)、Windows 10(64ビット)、
Windows Server 2008 R2 Service Pack 1、Windows Server 2012 R2 で実施。



SQL Server 2008 R2 SP3 Express Edition サイレントインストール



32ビット環境(OS)


SQLSERVERSQLEXPR_x86_JPN.exe /QS /CONFIGURATIONFILE="ConfigurationFile32.ini"

configuration file (32ビット)



[SQLSERVER2008]
INSTANCEID="SQLExpress2008"
INSTANCENAME="SQLExpress2008"
ACTION="Install"
FEATURES=SQLENGINE,REPLICATION,SNAC_SDK
HIDECONSOLE="True"
HELP="False"
INDICATEPROGRESS="False"
X86="True"
ERRORREPORTING="False"
INSTALLSHAREDDIR="C:Program FilesMicrosoft SQL Server 2008"
INSTANCEDIR="C:Program FilesMicrosoft SQL Server 2008"
SQMREPORTING="False"
AGTSVCACCOUNT="NT AUTHORITYNETWORK SERVICE"
AGTSVCSTARTUPTYPE="Automatic"
SQLSVCACCOUNT="NT AUTHORITYNETWORK SERVICE"
SQLSVCSTARTUPTYPE="Automatic"
SECURITYMODE="SQL"
ADDCURRENTUSERASSQLADMIN="True"
FILESTREAMLEVEL="1"
ENABLERANU="True"
SQLCOLLATION="Japanese_CI_AS"
SAPWD="パスワード"
TCPENABLED="1"
NPENABLED="1"
BROWSERSVCSTARTUPTYPE="Automatic"


64ビット環境(OS)


SQLSERVERSQLEXPR_x86_JPN.exe /QS /CONFIGURATIONFILE="ConfigurationFile64.ini"

configuration file (64ビット)



[SQLSERVER2008]
INSTANCEID="SQLExpress2008"
INSTANCENAME="SQLExpress2008"
ACTION="Install"
FEATURES=SQLENGINE,REPLICATION,SNAC_SDK
HIDECONSOLE="True"
HELP="False"
INDICATEPROGRESS="False"
X86="False"
ERRORREPORTING="False"
INSTALLSHAREDDIR="C:Program FilesMicrosoft SQL Server 2008"
INSTALLSHAREDWOWDIR="C:Program Files(x86)%Microsoft SQL Server 2008"
INSTANCEDIR="C:Program FilesMicrosoft SQL Server 2008"
SQMREPORTING="False"
AGTSVCACCOUNT="NT AUTHORITYNETWORK SERVICE"
AGTSVCSTARTUPTYPE="Automatic"
SQLSVCACCOUNT="NT AUTHORITYNETWORK SERVICE"
SQLSVCSTARTUPTYPE="Automatic"
SECURITYMODE="SQL"
ADDCURRENTUSERASSQLADMIN="True"
FILESTREAMLEVEL="1"
ENABLERANU="True"
SQLCOLLATION="Japanese_CI_AS"
SAPWD="パスワード"
TCPENABLED="1"
NPENABLED="1"
BROWSERSVCSTARTUPTYPE="Automatic"




まとめ


最新版へのサービスパックの適用は、
Microsoftのサポートによる脆弱性への対策だけでなく、
アプリケーション利用者に対して大きな安心感を与えるものです。

ただし、サービスパックを適用するだけでSQLインジェクションを防ぐことはできないので、
アプリケーション側での対策が必要です。

これらの対策方法は、「SQLインジェクション 対策」などの文言で検索することで
見つけることができます。




にほんブログ村のランキングに参加しています。
下記バナーをクリックしてくださると本当に助かります。
よろしくお願いいたします。
にほんブログ村 IT技術ブログへ
にほんブログ村


スポンサーサイト

SQLのORDER BYにCASE式を使って楽する方法

SQLで検索結果をソートする場合、
大きいもの順や、カナ順などにすることが多いですよね。

でも用途によっては、別の並びにする必要があったりして、
その度に別キー項目を追加するのは厄介です。

そんな時に便利なのが CASE式。

例えば、1から12までの月と99が入った列に対して、
期首月である4月からの表示に変えたい場合、


select [月名],[見積件数],[見積総額] from [t_data]
order by
case [月名] when 1 then 10 else
case [月名] when 2 then 11 else
case [月名] when 3 then 12 else
case [月名] when 99 then 13
end end end end,
[月名]


とすると

4
5
6
7
8
9
10
11
12
1
2
3
99

になります。

かなり便利!!

SQL Server 2005、2008、2012等で、「オペレーティング システムエラー 5 アクセスが拒否されました。」DBの復元に失敗する場合の対応方法

オペレーティング システムエラー 5 アクセスが拒否されました。


他のパソコンで作成したSQLデータベースのバックアップファイルを用いて復元する際、
「オペレーティング システムエラー 5 アクセスが拒否されました。」のエラーが発生することがあります。

これは、SQL Serverのサービスを起動しているユーザーに、
対象フォルダ、ファイルへのアクセス権限がないことが原因です。

このエラーが発生した場合は、以下の設定を行う事で復元が可能になります。
※他のサイト等で既出の方法ですが、かなり有効なので本ブログでも掲載したいと思います。


ビルトインアカウントの変更


1. コントロールパネルを開きます。
2. 管理ツールを開きます。
3. サービスを開きます。
4. SQL Server (インスタンス名)を右クリックし、プロパティを開きます。
5. 「ログオン」タブをクリックします。
6. ログオンをローカルシステムアカウントに変更し、「デスクトップとの対話をサービスに許可」をチェックし、「OK」をクリックします。
7. SQL Server (インスタンス名)を右クリックし、再起動をクリックします。

以上の設定で、復元時にエラーが発生しなくなります。

Microsoft SQL Server 2012 SP2 Express Edition の無人インストール(サイレントインストール)、エクスポート・ウィザード(DTSWizard.exe)

構成ファイル(ConfigurationFile.ini)の作成方法



SQL Server はコマンドラインからセットアップをする際に構成ファイルを利用することができます。

構成ファイルを作成するには、
SQLEXPR_x86_JPN.exe、またはSQLEXPR_x64_JPN.exeを以下の設定で実行してください。

SQLEXPR_x86_JPN.exe /UIMODE=Normal /ACTION=Install
SQLEXPR_x64_JPN.exe /UIMODE=Normal /ACTION=Install

SQLEXPR_x86_JPN.exe、またはSQLEXPR_x64_JPN.exeは以下で入手できます。
MicrosoftR SQL ServerR 2012 Service Pack 2 (SP2) Express

SQL2012ExpressInstall2.png


インストール画面に値を設定しながら先に進めていくと、
「インストールの準備完了」の画面に進みますので、
この画面の『構成ファイルのパス』に記述されているパスに構成ファイルが保存されているので、
これを他のフォルダにコピーしてください。

コピーが済みましたら、インストール途中のこの画面を「キャンセル」で閉じてください。

この段階では、まだインストールは行われていません。


SQL Server 2012 SP2 Express のサイレントインストール



/QS /Q オプションを付けることで、サイレントインストールを行うことができます。

なお、サイレントインストールする場合は、UIMODE="Normal"オプションを有効にしたままだとエラーになるので、
ConfigurationFile.ini内のUIMODE="Normal"部分をセミコロンでコメントしてください。

サイレントインストール時にはライセンス条項のチェックも自動化しないといけないので、
ACTION="Install"の次行に、IAcceptSQLServerLicenseTerms="True"の行を追加します。

コマンドラインからセットアップをするには、以下の形式でEXEを起動してください。
SQLEXPR_x86_JPN.exe /QS /SAPWD="saユーザーのパスワード" /ConfigurationFile="ConfigurationFile.ini"

なお、構成ファイル(ConfigurationFile.ini)の作成の為にインストールしているので、
これをアンインストールした上でサイレントインストールする必要があります。

「プログラムと機能」から、Microsoft SQL Server 2012、Microsoft SQL Server 2012 Native Client、
Microsoft SQL Server 2012 Transact-SQL ScriptDom、Microsoft SQL Server 2012 用 SQL Server Browser、
Microsoft SQL Server 2012 セットアップ(日本語)をアンインストールしてサイレントインストールを行ってください。

先にMicrosoft SQL Server 2012 用 SQL Server Browserをアンインストールしないと、
Microsoft SQL Server 2012 セットアップ(日本語)のアンインストールができないのでご注意ください。


SQL Server 2012の互換性とデータの移行


SQL Server は基本的に、直近三世代のバージョンの SQL Server のバックアップをリストアすることが可能となっています。

ちなみに、SQL Server 2005 Express Edition のデータベースをバックアップし、
SQL Server 2012 SP2 Express Edition に復元しましたが、
問題なく利用できました。

互換性については以下の記事で詳しく説明されていましたので、
是非参考にしてください。
SQL Server のバックアップのリストアと互換性レベルの整理

SQL2012互換性

現時点でのSQL Server の最新バージョンが SQL Server 2014 なので、
SQL Server 2005のデータベースをSQL Server 2014で利用する場合には、
一旦、SQL Server 2008 R2かSQL Server 2012 に復元/バックアップし、
SQL Server 2014で復元する必要があります。

また各バージョン間の相違点があるので、
「ALTER DATABASE 互換性レベル (Transact-SQL)」の各資料を読み、
問題となる場合は、プログラム等を修正する必要があります。

データベースの逆移行


基本的に新しいバージョンから古いバージョンへのデータベースの移行は避けたいものですが、
システムの並行稼動時やデータベースの移行時には、
システム納入先の客が、新しいバージョンの古いバージョンのデータベースを同時運用してしまい、
古いバージョンのデータベースに直近の顧客データを保存してしまい、
対応せざる得ない場合があります。

こういった場合には、
「SQL Serverインポートおよびエクスポート・ウィザード(DTSWizard.exe)」が役立ちます。

このツールは、C:\Program Files\Microsoft SQL Server\90\DTS\Binnや、
C:\Program Files\Microsoft SQL Server\100\DTS\Binnなどの場所に隠されていますので、
エクスプローラーから起動させてください。

SQL_DTSWizard001_1.png

テーマ:プログラミング - ジャンル:コンピュータ

Windows Firewall to Allow SQL Server Access(netsh advfirewall)

【開発者、ネットワーク設定者向け】

カスケード接続したハブ環境下のWindows7端末に、
SQL Server 2008 R2 Express Edition をインストールしてみたのですが、
Windowsファイアウォールの例外設定に、
TCP1433、UDP1434の受信の規則設定を行っても接続できないことが判明。

結局は、名前付きインスタンスを利用するため、
動的ポートを使用しますので、
sqlservr.exe と sqlbrowser.exeの受信の規則設定で、
ちょっとした工夫が必要みたいでした。

なお、SQL Server 2008 R2 のインストールパスは、
C:\Program Files\Microsoft SQL Server 2008に変えています。

BATファイルで実行する場合


BATファイルで処理するなら以下の通りです。

netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=private,public
netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=domain
netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=private,domain
netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=domain

netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=private,public
netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=domain
netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=private
netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=domain


Delphiで作ったプログラムで実行する場合


自作のインストーラーでSQL Server のインストールやら、
データベース構築などを行っていたので、
Delphiで作成したプログラムのサンプルも作ってみました。

ShellExecuteでコマンドプロンプトを起動して、
クリップボード経由で、netsh advfirewallコマンドを発行しています。
(Mr.XRAYさんの490_コマンドプロンプトを ShellExecute 関数で起動を参考にさせていただきました。)
注意すべきなのは、Sleepで一定間隔を空けないと駄目な点です。


では、Delphiのソースは以下の通り。
(半角スペースを全角スペースに変更しています。)

//=====================================================================================
unit FM_FireWallSetting;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellAPI, StdCtrls, Clipbrd;

type
  TForm7 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form7: TForm7;

implementation

{$R *.dfm}

procedure TForm7.Button1Click(Sender: TObject);
const
  ID_Paste = $FFF1;
var
  LFile      : String;
  LParams    : String;
  LCmdWnd    : HWND;
  LText      : String;
  LCmdText   : String;
  LCmdTextF  : array [1..8] Of String;
  i          : Integer;
begin
  LFile := 'cmd.exe';
  LParams  := '/K';
  ShellExecute(0, '', PChar(LFile), PChar(LParams), nil, SW_SHOW);

  LCmdTextF[1] := 'netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=private,public';
  LCmdTextF[2] := 'netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=domain';
  LCmdTextF[3] := 'netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=private,domain';
  LCmdTextF[4] := 'netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=domain';

  LCmdTextF[5] := 'netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=private,public';
  LCmdTextF[6] := 'netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=domain';
  LCmdTextF[7] := 'netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=private';
  LCmdTextF[8] := 'netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=domain';

  Sleep(300);

  LCmdWnd := FindWindow('ConsoleWindowClass', nil);
  if LCmdWnd = 0 then begin
    MessageBox(Handle, 'コマンドプロンプトが起動していません', '情報', MB_ICONINFORMATION);
    exit;
  end;

  for i := 1 to 8 do
  begin
    LCmdText :=LCmdTextF[i] + sLineBreak;
    Clipboard.AsText := LCmdText;
    SendMessage(LCmdWnd, WM_COMMAND, ID_Paste, 0);
    Application.ProcessMessages;
    Sleep(100);
  end;

  SendMessage(LCmdWnd, WM_CLOSE, 0, 0);
  Application.ProcessMessages;
end;

end.
//=====================================================================================


まとめ


ちょっとした設定なんですが、
これひとつ正しくできていないだけで、
クライアントPCからの接続ができなくなるので、
もし、客先であったなら、冷や汗ものです。

BATファイルでもいいし、EXEファイルでもいいので、
こういった知識が非常に役立ちます。

BATファイル化して、
USBメモリに保存しておくのもお勧めです。

テーマ:プログラミング - ジャンル:コンピュータ

スポンサードリンク
最新記事
カテゴリ
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

月別アーカイブ
激安特価情報
Amazonタイムセール
楽天市場タイムセール
Yahoo出店記念セール
NTT-X Store 激安特価!
激安家電のGENO PLUS
コストコ・イケアの通販
つけたまま眠れるファンデ
家電品を安値で買うならこちら!
ケーズデンキ
ベルメゾンアウトレット
激安ブランドコスメ 週末セール
モバコレ SALE
au Brand Garden
アウトレットモール BRANDELI
ブックオフオンラインのオトナ買い
ビッグカメラ◆週末特別セール
ソフマップ 中古・アウトレット
【宿代全額ポイントバック】夏休み早期予約キャンペーン
ネットプライス 送料294円
イオンモールオンライン
EDIONネットショップ
最新コメント
天気予報

-天気予報コム- -FC2-
カウンター
検索フォーム
リンクに表示されるテキスト
ランキング参加中
クリックしていただけると、 こまつもとは大変嬉しいです。



人気ブログランキングへ

ランキングに参加しています。 クリックのご協力をお願い致します。 いつもありがとうございます。 にほんブログ村 通販ブログへ
ブログランキング・にほんブログ村へ
にほんブログ村 IT技術ブログ ソフトウェアへ
にほんブログ村 ゲームブログへ
にほんブログ村 IT技術ブログへ



人気ブログをblogramで分析

趣味・個人

ランキング

リンクリックブログランキング

私を登録 by BlogPeople



RSSリンクの表示
リンク
QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。