Node-REDでMS SQLServerへのアクセス設定

#１．	はじめに
Node-REDをから、SQL Server 2019 EXPRESS へのアクセス設定を、環境構築から実行までをまとめた備忘録です。

#２．	環境
<strong>・Windows Server 2016</strong>
　　　　コンピュータ名：MMTEST02
　　　　パブリックIP:162.133.96.103/28
　　　　プライベートIP:10.212.181.166/26
<strong>・SQL Server 2019 EXPRESS (以降SQLServerと略します)</strong>
 　　　　インスタンス名：SQLEXPRESS（デフォルト値）
<strong>・SQL Server management Studio 18 (以降SSMSと略します)</strong>
<strong>・Node-RED</strong>
<strong>・node-red-contrib-mssql-plus</strong>
　　　　Node-REDからSQLServerへのアクセス用ノード

#３．	環境のセットアップ
##３―１．SQLServerのインストール
　　　　下記サイトからEXPRESSをダウンロード
　　　　https://www.microsoft.com/ja-jp/sql-server/sql-server-downloads
　　　　![01.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/01.png)
　　　　ここではExpress版をダウンロード。デフォルト値でインストールしました。
　　　　![02.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/02.png)
　　　　<font color="green">「基本(B)」クリック。</font>
　　　　![03.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/03.png)
　　　　<font color="green">「実行する」クリック。</font>
　　　　![04.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/04.png)
　　　　<font color="green">「Install」クリック。</font>
　　　　![05.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/05.png)
　　　　<font color="green">「閉じる」クリック。</font>
　　　　![06.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/06.png)
        <font color="green">SSMSは後でインストールしますので、「はい」で終了。</font>
　　　　これで、SQLServerのインストール完了。

##３―２．SSMSのインストール
　　　　下記サイトからSSMSをダウンロード
　　　　https://docs.microsoft.com/ja-jp/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15
　　　　![07.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/07.png)
　　　　<font color="green">「Install」クリック。</font>
　　　　![08.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/08.png)
　　　　<font color="green">「Restart」クリック。</font>
　　　　再起動し、SSMSのインストール完了。

##３―３．Node-RED
###３―３－１．Node.jsのインストール
　　　　下記サイトからNode.jsをダウンロード
　　　　https://nodejs.org/ja/
　　　　![09.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/09.png)
　　　　ここでは、”12.18.1 LTS”をインストールしました。
###３―３－２．Node-REDのインストール
　　　　![10.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/10.png)
　　　　<font color="green">「Next」クリック。</font>
　　　　![11.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/11.png)
　　　　"I accept the terms in the License Agreement "チェック。
　　　　<font color="green">「Next」クリック。</font>
　　　　![12.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/12.png)
　　　　<font color="green">「Next」クリック。</font>
　　　　![13.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/13.png)
　　　　<font color="green">「Next」クリック。</font>
　　　　![14.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/14.png)
　　　　<font color="green">「Next」クリック。</font>
　　　　![15.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/15.png)
　　　　<font color="green">「Install」クリック。</font>
　　　　![16.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/16.png)
　　　　<font color="green">「Finish」クリック。</font>
　　　　Node.jsのインストール完了。

###３―３－２．Node-REDのインストール
　　　コマンドプロンプトから下記コマンド実行

```commend:Node-Redのインストール
> npm install -g --unsafe-perm node-red
```
　　　実行は、コマンドプロンプトから下記コマンド

```commend:Node-Redの実行
> node-red
```
　　　　停止する際は、コマンドプロンプトにて、Ctrl+C

  Node-RED画面を表示するには、ブラウザーから下記URLとポート番号1180を入力
　※URLのアドレスはお使いのサーバアドレスにより変わります。
　同一ホストで動かす場合、http://127.0.0.1:1880/

##３―４．node-red-contrib-mssql-plusのインストール
　　　　インストールは、Node-REDの画面から行います。
　　　　![17.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/17.png)
　　　　<font color="green">「バーガーメニュー」⇒「パレットの管理」。</font>
　　　　![18.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/18.png)
　　　　<font color="green">「ノードを検索」タグ。</font>
　　　　![19.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/19.png)
　　　　<font color="green">「ノードを検索」タグ。</font>
　　　　![20.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/20.png)
　　　　<font color="green">「追加」クリック。</font>
　　　　![21.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/21.png)
　　　　"MSSQL"ノードが追加されました。

#４．SQLServerの設定
　　　リモートからsaユーザでアクセスできるように、下記４点の設定を行います。
　　　　　　（１）リモートからの接続許可確認
　　　　　　（２）認証モードの変更。
　　　　　　（３）saの有効化
　　　　　　（４）TCP/IPの有効化
　　　　　　（５）ポートの設定

##４－１．リモートからの接続許可の確認
        「SSMS」での操作です。
　　　　![22.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/22.png)
　　　　<font color="green">コンピュータの箇所を右クリック⇒「Properties」。</font>

　　　　![23.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/23.png)
　　　　<font color="green">「Connections」⇒「Allow Remote connection to this server」がチェックされているか確認。チェックなければチェックして「OK」クリック。</font>

##４－２．認証モードの変更
　　　　SQLServer認証モードは、Windows認証とSQL Server認証があります。
　　　　デフォルトではWindows認証のみの設定です。
　　　　ここでは、両方のモードで認証できるように設定しました。
　　　　尚、マイクロソフト社はSQL Server認証を推奨していませんので、本番業務では使用しない
方が良いです。
　　　　「SSMS」での操作です。

　　　　![24.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/24.png)
　　　　<font color="green">コンピュータの箇所を右クリック⇒「Properties」。</font>

　　　　![25.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/25.png)　　　　
　　　　<font color="green">「Security」⇒「SQL Server and Windows Authentication node」を選択⇒「OK」。</font>

　　　　後ほどSQLServerを再起動します。
　　　　![26.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/26.png)　　　　
　　　　<font color="green">「OK」。</font>

４－３．saの有効化
　　　　saはSQLServerをインストールすると作成される、最高権限をもつユーザーです。
　　　  管理者アカウントのためデフォルトでは無効となっています。本番業務では別のアカウントを作成し、利用することをお勧めします。ここでは、テスト目的ですので、saアカウントを使用しました。
　　　　「SSMS」での操作です。

　　　　![27.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/27.png)　　　　
　　　　<font color="green">「Security」⇒「Login」⇒「sa」⇒「Properties」。</font>

　　　　![28.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/28.png)　　　　
　　　　<font color="green">「Status」⇒「Login」のEnableを選択⇒「OK」</font>
　　　　ついでにsaのパスワードも変更しました。

　　　　![29.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/29.png)　　　　
　　　　<font color="green">「General」⇒「Password」パスワードの変更⇒「OK」</font>
　　　　ここでは、単純ですが “P@ssw0rd” にしました。

##４－４．TCP/IPの有効化
　　　　「SQL Server 2019 構成マネージャー」での操作です。

　　　　![30.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/30.png)　　　　
　　　　<font color="green">「SQLServer構成マネージャー(ローカル)」⇒「SQLServerネットワークの構成」⇒「SQLEXPRESSのプロトコル」
　　　　「TCP/IP」右クリック⇒「有効にする」。</font>

　　　　![31.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/31.png)　　　　
　　　　<font color="green">「OK」クリック。</font>

##４－５．ポートの設定
　　　　デフォルトでは動的ポートが設定されていますので、静的ポート1433に変更します。
　　　　「SQL Server 2019 構成マネージャー」での操作です。

　　　　![43.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/43.png)
　　　　<font color="green">「SQL Server 2019 構成マネージャー(ローカル)」⇒「SQLServerネットワークの構成」⇒「SQLEXPRESSのプロトコル」
　　　　 「TCP/IP」右クリック⇒「プロパティ」⇒「IPアドレス」タグ
　　　　　“IPALL”の”TCPポート“：「1433」
　　　　　“IPALL”の”TCP動的ポート“：ブランク　　に設定。</font>

##４－６．SQLServerサービスの再起動
　　　　「SQL Server 2019 構成マネージャー」での操作です。
　　　　ここまでの設定ですべて完了です。SQLServerサービスを再起動します。
　　　　![32.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/32.png)

##４－７．テスト用DBとテーブルの準備
　　　　DB：TestDB
　　　　Tabel:TestTable
　　　　　　Field: Field01 int
　　　　　　Field: Field02 nchar(5)
　　　　　　Field: Field03 nchar(8)
　　　　　　　　　　　　　　　　　　  で作成します。
　　　　![34.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/34.png)

###４－７－１．テスト用DBとテーブルの作成

　　　　![35.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/35.png)
　　　　<font color="green">「Databese」右クリック⇒「NewDatabase」
　　　　“Database name”:「TestDB」⇒「OK」。</font>

　　　　![36.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/36.png)
　　　　<font color="green">「Database」⇒「Table」⇒「New」⇒「Table…」。</font>

　　　　![37.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/37.png)
　　　　<font color="green">フィールド情報を設定したらタグの「✖」で終了。</font>

　　　　![38.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/38.png)
　　　　<font color="green">「Yes」クリック。</font>

　　　　![39.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/39.png)
　　　　<font color="green">テーブル名:"TestTable"入力⇒「OK」クリック。</font>

###４－７－２．データの登録
　　　　![40.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/40.png)
　　　　<font color="green">「New Query」クリック。</font>

　　　　![41.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/41.png)
　　　　データ登録のSQL文
　　　　<font color="green">「INSERT INTO TestDB.dbo.TestTable VALUES(123,'abcde','12345678');」
　　　　を登録後、「Execute」クリック。</font>

　　　　とりあえず2レコード登録しました。
　　　　![42.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/42.png)

##４－６．SQLCMDで接続確認
　　　　　　コマンドプロンプトより下記コマンドを実行し、結果レコードが表示されれば正常です。

```commend:SQL文
>sqlcmd -S MMTEST02W2016\SQLEXPRESS,1433 -U sa -P P@ssw0rd
```
　　　　sqlcmdプロンプトで下記コマンドを実行して、登録レコードを確認します。

```commend:確認
1> SELECT * FROM TestDB.dbo.TestTable;
2> go
Field01     Field02 Field03
----------- ------- --------
        123 abcde   12345678
        456 fghij   98765432

(2 行処理されました)
1> exit
```

　　　　![44.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/44.png)

#５．Node-RedでSQLServerへのアクセス実行
##５－１．Node-Red側での設定
　　　　簡単ですが、実行するとMSSQLノードに記述した、SQL文
　　　　「SELECT * FROM TestTable;」を実行し、結果をデバッグウィンドウに表示します。
　　　　![45.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/45.png)

###５－１－１．SQLノードの設定
　　　　"MSSQL"ノードをクリックして設定します。
　　　　![46.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/46.png)
　　　　![47.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/47.png)

```commend:フロー
[{"id":"a2c945c1.c5ca98","type":"MSSQL","z":"f3c54f34.6c99f","mssqlCN":"dc0514db.ad0138","name":"","query":"SELECT * FROM TestTable;","outField":"payload","returnType":0,"throwErrors":1,"x":340,"y":140,"wires":[["d0580bd3.4b3f28"]]},{"id":"dc0514db.ad0138","type":"MSSQL-CN","z":"","tdsVersion":"7_4","name":"","server":"10.212.181.166","port":"1433","encyption":false,"database":"TestDB","useUTC":false,"connectTimeout":"4000","requestTimeout":"5000","cancelTimeout":"5000","pool":"5","parseJSON":false}]
```

#６．Node-RedでSQLServerへのアクセス実行結果
　　　　2レコードの検索結果がデバッグウィンドウで確認できましたので、正常に動作しています。
　　　　![48.png](http://seahorse-inc.com/QIITA/NodeRed-SQLServer/48.png)

#７．おわりに
丁寧に環境設定を記載したため、情報が増えてしましましたが、Node-RedでSQLServerへのアクセス設定は大変簡単にできました。