#author("2016-09-11T12:02:11+09:00","default:nowsky","nowsky")
*Microsoft SQL Server [#y5907991]
-[[SQL Server 2008 Express:+https://www.microsoft.com/ja-jp/download/details.aspx?id=1695]]
-[[SQL Server 2014 Express:+https://www.microsoft.com/ja-jp/download/details.aspx?id=42299]]
-[[SQL Server 2016 Express:+https://www.microsoft.com/ja-JP/download/details.aspx?id=52679]]
#author("2016-09-17T00:08:06+09:00","default:nowsky","nowsky")
*Joomla [#qeeb8c19]
-[[Joomla! The CMS Trusted:+https://www.joomla.org/]]
-[[Joomla! JAPAN:+http://www.joomla.jp/]]

マイクロソフトが開発しているRDBMSの一種。SQL ServerとかMSSQLと呼ぶ事が多い。
名前から判るとおりWindows環境で使う事が多く、ADO.NETを使ったシステム構築がしやすいのが特長。
ライセンス料が非常に高く、バージョンによっては100万円する物もある。
大規模システム向けのCMSツール。設定次第でWebページ、ブログ、Wiki等を構築する事が出来る。
特長の一つとして、OSSのCMSなのに利用可能データベースの一つとして、&font(b){MS SQL Serverをサポートしている事。};
また、WebサーバにIISを用いても動作するので、IISとMSSQL連携時の技術検証用としても重宝する。
 
検証・勉強用として機能制限がされているが無料のSQL Server Expressも用意されており、
余程の事が無ければExpress版で要件を満たせる場合が多い。
上記の様に、クロスプラットフォーム対応が&font(b){無料の範疇で進んでいる};為、
WebサーバはApache・DBサーバはMSSQL等の変則的な構成も作る事が出来る。
~
*メモ [#paf0636f]
-SQL Server 2016 ExpressからWith Tools等の細分化が無くなり、
SQL Server Management Studioが同梱されなくなった。
-別途、SSMS 2016(無料版)をインストールすれば、今までのWith Tools相当を使う事は出来る。
-SQL Server 2014/2016 Expressだと、1DBで10GBまで構築出来る。
~
*インストール [#c9927ba0]
*インストール [#e8782cba]
&size(16){&font(b){0. 前提条件};};
-構築環境
 [VM]:   Hyper-V ver6.3.9600
 [OS]:   WindowsServer2012R2 64bit
 [MEM]:  4GB
 [HDD]:  C:50GB / D:50GB
 [SQL]:  SQL Server 2016 Express
 [SSMS]: SQL Server Management Studio 2016
 [VM]:  Hyper-V ver6.3.9600
 [OS]:  WindowsServer2012R2 64bit
 [MEM]: 4GB
 [HDD]: C:50GB / D:50GB
 [SQL]: SQL Server 2016 Express
 [IIS]: IIS 8.5.9600
 [CMS]: Joomla! ver3.6.2
 [DIR]: C:\inetpub\wwwroot\joomla

-パラメータ
 [インストール用TEMP]:   C:\SQLServer2016Media
 [DBデータディレクトリ]: D:\Microsoft SQL Server
 [インスタンス構成]:     既定のインスタンス

~
&size(16){&font(b){1. インストール作業(MSSQL)};};
Microsoftから事前にSQL Serverのインストーラをダウンロードしておく。
下記手順だとReporting Servicesもインストールしているが、必要無ければインストールをしなくても良い。
&size(16){&font(b){1. インストール作業};};
事前に、[[IIS:+http://www.ns-lab.org/wiki/?Windows/Binary/IIS]]と[[MSSQL:+http://www.ns-lab.org/wiki/?Windows/Binary/MSSQL]]の設定を済ませておく。
日本語版についてはJoomla Japanで配布しているが、インストールしても日本語が反映されなかったので、
オフィシャル版をインストールした後に日本語ライブラリを追加する事で、日本語ローカライズを行う。
 
#region(MSSQL 2016 Express インストール手順)
>&ref(sql_express2016_01.png,left,nowrap,50%);
インストーラを起動したらカスタムを選択
#region(Joomla インストール手順)
>&ref(joomla_inst_01.png,left,nowrap,60%);
Joomlaのパッケージを &font(b){"C:\inetpub\wwwroot\joomla"}; に展開したら、
インストール時限定で「IIS_IUSRS」に「フルコントロール権限」を付与する。
 
>&ref(sql_express2016_02.png,left,nowrap,50%);
SQL Serverのインストールで使用するテンポラリを指定
この段階では実際のインストールはまだ動かない -> [インストール]
>&ref(joomla_inst_02.png,left,nowrap,50%);
Webブラウザで &font(b){"http://{WebサーバIPアドレス}/joomla/"}; にアクセスする
すると、インストール画面にリダイレクトされるので設定事項を画面に入力する。
この時、サイトオフラインは必要に応じてON/OFFを切り替える。
 
>&ref(sql_express2016_03.png,left,nowrap,50%);
バイナリをダウンロードし出すのでしばらく放置
>&ref(joomla_inst_03.png,left,nowrap,50%);
データベース種類に「Microsoft SQL Server」を選択した上で、データベースの接続情報を入力する。
この画面でSQL Serverが選択出来ない場合、PHPエクステンションの読込みに失敗しているので、
[[MSSQLの設定方法:+http://www.ns-lab.org/wiki/?Windows/Binary/MSSQL]]を参考に修正を行う。
 
>&ref(sql_express2016_04.png,left,nowrap,50%);
放置していると、SQL Serverのインストーラが起動する
新規インストールの場合「新規スタンドアロンインストール」をクリック
>&ref(joomla_inst_04.png,left,nowrap,50%);
FTPモードは今回使わないので、FTPモードを停止させる。
ちなみに、Windows ServerでFTPモードを使う場合、IISの設定変更が必要になる。
 
>&ref(sql_express2016_05.png,left,nowrap,50%);
「ライセンス条項に同意」をチェック -> [次へ]
>&ref(joomla_inst_05.png,left,nowrap,50%);
今回はグローバル言語でインストールした後に、日本語へローカライズする為、
サンプルデータのインストールで「サイト 英語(GB)」を選択する。
 
>&ref(sql_express2016_06.png,left,nowrap,50%);
「SQL Serverの更新プログラムを自動入手」をチェック -> [次へ]
>&ref(joomla_inst_06.png,left,nowrap,50%);
インストーラが走り出すので暫く放置する。
完了したら、画面に従って「installationディレクトリを削除」のボタンを押してインストールを完了する。
管理画面には &font(b){"http://{WebサーバIPアドレス}/joomla/administrator/"}; でログイン出来る。
#endregion

~
&size(16){&font(b){2. ローカライズ};};
現状では言語設定が英語になっているので日本語にローカライズを行う。
普通ならばエラー出ずに作業が完了する筈なのだが、言語データをインストールする時にDBエラーが出てしまう為、
&font(b){手動でDBの設定変更};をする事でエラーを回避し日本語化を完了させる。
DBの操作は全てSSMSで行う為、事前にSSMSのインストールを完了させておく。
 
>&ref(sql_express2016_07.png,left,nowrap,50%);
インストール要件を満たしているか確認が走る
WindowsFirewallの警告が出るが、後で修正すれば良いので無視 -> [次へ]
#region(Joomlaの日本語化)
-SQL Serverのテーブル設計変更制限を一時的に解除する
[ツール] -> [オプション] -> [デザイナ] -> [テーブル デザイナおよびデータベース デザイナ] ->
[テーブルの再生成を必要とする変更を保存できないようにする] の&font(b){チェックを外す};

 
>&ref(sql_express2016_08.png,left,nowrap,50%);
インストールする機能を選択。殆ど使わないLocalDBだけはチェックを外す
インスタンスルートは、データベース・バックアップ・ログ等が入るディレクトリ
共有機能ディレクトリは、SQL Server実行バイナリのインストール先
今回は上記の通りに選択・入力を行う -> [次へ]
>&ref(joomla_sql_01.png,left,nowrap,40%);
[JoomlaDB] -> [dbo.***_extensions] -> [列:custom_data] ->
[列名:custom_data / データ型:nvarchar(MAX)] の&font(b){NULLを許容にチェックを入れる};

 
>&ref(sql_express2016_09.png,left,nowrap,50%);
「既定のインスタンス」を選択。IDはデフォルトのまま -> [次へ]
-Joomlaの管理者画面を開き、 下記要領でローカライズデータをインストールする。
[Extensions] -> [Languages] -> [Installed] -> [Install Languages] -> [Japanese] -> [Install]

 
>&ref(sql_express2016_10.png,left,nowrap,50%);
SQL Serverの実行ユーザを選択。とりあえずデフォルト(上記)のまま
ボリュームメンテナンスタスク実行特権は&color(#ff0000){&font(B){チェックを外す};}; -> [次へ]
>&ref(joomla_sql_02.png,left,nowrap,60%);
|Title            |English (UK)|
|Title Native     |English (UK)|
|Language Tag     |en-GB       |
|URL Language Code|en          |
|Image Prefix     |en          |
|Status           |Published   |
|Access           |Registered  |
Joomlaの管理者画面を開き、既存のコンテンツローカライズ設定を変更する
[Extensions] -> [Languages] -> [Content Languages] -> [New]
 
>&ref(sql_express2016_11.png,left,nowrap,50%);
DBアクセスユーザと認証方法を設定する
デフォルトだとログイン中のOSローカルユーザが登録されるが後から消す事が出来る
SSMSからOSローカルユーザを消せば、結果としてSQL Server認証に限定させる事も出来る -> [次へ]
>&ref(joomla_sql_03.png,left,nowrap,60%);
|Title            |日本語 (JP)|
|Title Native     |日本語 (JP)|
|Language Tag     |ja-JP      |
|URL Language Code|ja         |
|Image Prefix     |ja         |
|Status           |Published  |
|Access           |Public     |
Joomlaの管理者画面を開き、 上記の通りにコンテンツのローカライズ設定を行う
[Extensions] -> [Languages] -> [Content Languages] -> [New]
 
>&ref(sql_express2016_12.png,left,nowrap,50%);
Reporting Servicesは構成処理を行う -> 次へ
>&ref(joomla_sql_04.png,left,nowrap,60%);
Joomlaのデータベースを直接編集し、デフォルト言語を &font(b){"en-GB"}; から &font(b){"ja-JP"}; に書き換える。
[JoomlaDB] -> [dbo.***_extensions] -> [name:com_languages] ->
[params:{"administrator":"ja-JP","site":"ja-JP"}] に&font(b){書き換える};

 
>&ref(sql_express2016_13.png,left,nowrap,50%);
利用規約を確認する -> [承諾] -> [次へ]
この後は画面に従ってクリックすればインストールが完了する
 
>&ref(sql_express2016_14.png,left,nowrap,50%);
インストールが完了したらインストーラを閉じる
インストーラを閉じたらインストールテンポラリ「C:\SQLServer2016Media」を削除する
-一時的に変更した「テーブル設計変更制限」と「custom_dataのNULL許容」を元に戻す。
[テーブル デザイナおよびデータベース デザイナ] -> [テーブルの再生成を...] に&font(b){チェックを入れる};
[dbo.***_extensions] -> [列名:custom_data / データ型:nvarchar(MAX)] の&font(b){NULLを許容のチェックを図ス};
#endregion

~
&size(16){&font(b){2. インストール作業(SSMS)};};
SQL ServerをGUI操作する為に、SQL Server Management Studio (SSMS)を追加インストールする。
インストーラは[[MSグローバル:+https://msdn.microsoft.com/en-us/library/mt238290.aspx]]の方からダウンロードを行うが、
インストールの段階で日本語が反映される為、実際には日本語版のSSMSを使う事が出来る。
 
#region(SSMS 2016 インストール手順)
>&ref(ssms2016_01.png,left,nowrap,70%);
事前にインストーラを入手しておく
 
>&ref(ssms2016_02.png,left,nowrap,50%);
規約を読んだら「インストール」を選択
この後、5~10分程度でインストールが完了する
#endregion
&size(16){&font(b){3. 参照権限の修正};};
-参考サイト:[[COMPNET - Joomla! を弄ってみた [準備編]:+https://www.compnet.jp/archives/1231]]

~
&size(16){&font(b){3. TCP/IP接続の有効化};};
デフォルトの状態では、IPアドレスによるMSSQL接続が拒否されている為、
SQL Serverのネットワーク構成を変更してTCP/IP接続を有効化する。
TCP/IP接続の設定変更をしただけではTCP/IP接続が有効にならないので、DBの再起動も実施する。
インストール時の処置としてIISにフルコントロール権限を付与しているので、参照権限を本来の値に修正する。
パーミッションについては、Joomlaのシステム情報から参照出来るので、確認しながら書き込み権限の付与を行う。
 
#region(MSSQL構成マネージャー設定内容)
-DBインスタンスの構成によって、MSSQL通信に使用するプロトコルとポート番号が変化する。
サーバにFWを設定している場合、内容に合わせてポートを開けておく。
|既定のインスタンス  |TCP:1433                 |
|名前付きインスタンス|UDP:1434 / TCP:1025-65535|
#region(パーミッション変更手順)
-フルコントロール権限の削除
Joomlaのインストール先ディレクトリ &font(b){"C:\inetpub\wwwroot\joomla"}; に設定している、
「IIS_IUSRS」の「フルコントロール権限」を&font(b){全て削除};する

 
>&ref(mssql_tcpip_01.png,left,nowrap,50%);
「SQL Server 構成マネージャー」->「SQL Server ネットワークの構成」->
「"DBインスタンス名" のプロトコル」->「TCP/IP」->「状態:有効」
>&ref(joomla_perm_01.png,left,nowrap,40%);
Joomlaの管理画面を開きパーミッション情報を確認してリストを控えておく。
[システム] -> [システム情報] -> [フォルダ パーミッション] -> リストを全てコピー
 
>&ref(mssql_tcpip_02.png,left,nowrap,50%);
「SQL Server 構成マネージャー」->「SQL Server のサービス」->
「SQL Server "DBインスタンス名"」->「再起動」
>&ref(joomla_perm_02.png,left,nowrap,45%); &ref(joomla_perm_03.png,left,nowrap,45%);
ファイルとディレクトリのパーミッションを、設定例の様に変更する。
コマンドで一括変更する場合、管理者権限のコマンドプロンプトに下記を流し込む。
 icacls C:\inetpub\wwwroot\joomla\administrator/components /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\administrator/language /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\administrator/language/en-GB /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\administrator/language/ja-JP /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\administrator/language/overrides /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\administrator/manifests/files /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\administrator/manifests/libraries /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\administrator/manifests/packages /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\administrator/modules /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\administrator/templates /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\components /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\images /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\images/banners /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\images/headers /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\images/sampledata /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\language /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\language/en-GB /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\language/ja-JP /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\language/overrides /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\libraries /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\media /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\modules /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/authentication /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/captcha /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/content /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/editors /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/editors-xtd /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/extension /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/finder /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/installer /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/quickicon /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/search /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/system /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/twofactorauth /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\plugins/user /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\templates /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\configuration.php /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\cache /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\administrator/cache /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\administrator/logs /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 icacls C:\inetpub\wwwroot\joomla\tmp /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
#endregion

~
*PHPからMSSQL接続 [#p5b8fa09]
PHPからSQL Serverへ接続する時には、専用の追加ドライバをインストールし、
エクステンションとして読み込ませる必要がある。
&size(16){&font(b){4. PHPキャッシュの追加};};
環境によっては、PHPキャッシュディレクトリを追加指定しないと、
Joomlaのテンプレートインストール機能が動かない場合がある。
構築した環境が該当するか調べるには、 [エクステンション] -> [管理] -> [警告] を確認する。
PHPキャッシュを &font(b){"C:\inetpub\temp\php"}; に作成する場合の例を参考までにメモしておく。
 
Windowsから接続する方法は、[[IISのメモに記載している:+http://www.ns-lab.org/wiki/?Windows/Binary/IIS#m12e7271]]ので、そちらを参考にする。
Linuxの場合はディストリビューション毎にバイナリが変化するので、
環境に合った物をダウンロードして利用する。
-[[[RedHat] - Microsoft ODBC Driver 13 (Preview) and 11 for SQL Server:+https://www.microsoft.com/en-us/download/details.aspx?id=36437]]
-[[[SUSE] - Microsoft ODBC Driver 13 and 11 Previews for SQL Server:+https://www.microsoft.com/en-us/download/details.aspx?id=34687]]
-[[[Ubuntu] - Microsoft ODBC Driver 13 (Preview) for SQL Server:+https://www.microsoft.com/en-us/download/details.aspx?id=50419]]

 
インストール手順はMicrosoftが公開しているので、そちらを参考にインストールを進める。
PHPドライバをインストールしたら、上記のIISメモと同様にエクステンションにPHPドライバを追加して読み込ませる。
-[[Linux に SQL Server 用 Microsoft ODBC Driver をインストールする:+https://msdn.microsoft.com/ja-jp/library/hh568454(v=sql.110).aspx]]
 インストール
#region(PHPキャッシュ設定例)
 コマンドプロンプトで実行
 ---
 # ./install.sh verify
 # ./install.sh install
 mkdir C:\inetpub\temp\php
 icacls C:\inetpub\temp\php /grant:r IIS_IUSRS:(RX,W) IIS_IUSRS:(OI)(CI)(IO)(M)
 
 アンインストール
 php.iniを編集
 ---
 # rm /usr/bin/sqlcmd
 # rm /usr/bin/bcp
 # rmdir /opt/microsoft/msodbcsql
 # odbcinst -u -d -n "ODBC Driver 13 for SQL Server"
 file_uploads   = On
 memory_limit   = 32M
 post_max_size  = 32M
 upload_tmp_dir = "C:\inetpub\temp\php"
 upload_max_filesize = 16M
#endregion