2018年12月24日月曜日

DAC接続(既定のインスタンス)

SQL Serverの専用管理者接続(DAC)-- Dedicated Administrator Connection
の動作をテストする。
対象DB: SQL Server 2017 (x64) ver:14.0.2002.14 Developer Edition
DB Instance:規定のインスタンス
SSMS:v17.9.1

DACとは?

DACについては下記リンクを参照
Microsoft Document: データベース管理者用の診断接続
SQL Server では、サーバーへの標準の接続が確立できないときに、管理者向けの特殊な診断接続が用意されています。
診断接続を使用することにより、 SQL Server が標準の接続要求に応答していない場合でも、管理者は SQL Server
にアクセスして診断クエリを実行し、問題のトラブルシューティングを行うことができるようになります。
この DAC (専用管理者接続) では、暗号化やその他の SQL Serverのセキュリティ機能がサポートされます。 DAC
で実行できるのは、ユーザー コンテキストを別の管理者ユーザーに変更する操作のみです。
SQL Server は DAC の正常な接続を試みますが、極端な状況においては失敗する場合もあります。
障害時の調査用の接続らしい。
今まで使ったことは無いが。

DACの注意点

  • DACをリモートで使用するためには構成オプションの「remote admin connections」を有効化(1)する必要がある。
  • DACでリモート接続する場合は、TCP1434ポートの受信を許可すること。
  • ローカルで接続する分には構成オプションの変更は必要ない。
  • 対象となるインスタンスのSQL Server のサービスが開始されていれば良い。(SQL Server Agent Service は停止で可)
  • 接続は sqlcmd 又は SSMS を使う。
※Express EditionでDACを使う場合は別途トレースの設定が必要になる。

SSMSを使ったDACによる接続(ローカル)

名前付きインスタンスに対して、ローカルでDACによる接続を行う場合は下記のように「admin:」をサーバー名に加える。
  • サーバー名: admin:[Server Name or IP]
  • ログイン:sysadminロールのメンバー(saなど)
  • SSMSは予め起動している状態でクエリの接続先の変更若しくは、新規で「データベース エンジン クエリ」を追加して接続先としてDACを指定すること。(SSMS起動時にDACを指定しないこと)
enter image description here

enter image description here

接続に成功すると、クエリ画面の下部の接続先の表示(上図中赤)が、
「admin:[Server Name]」になる。

SSMSを使ったDACによる接続(リモート)

DACのリモート接続を許可するために、サーバー構成オプションの設定が必要です。
sp_configure 'remote admin connections', 1;  
GO  
RECONFIGURE WITH OVERRIDE;  
GO  
既定のインスタンスに対して、リモートでDACによる接続を行う場合はローカルの場合の文字列でサーバー名をIPにする。
→ ADに参加しているのであればサーバー名のままでも可(DNS要構成)
  • リモート接続であるが、ポート名を入れないこと
  • サーバー名: admin:[IP]
  • ログイン:sysadminロールのメンバー(saなど)
enter image description here
接続文字に通常のリモート接続時同様にポート番号(1433)を入れて実行すると
(admin:[IP],1433)
下記エラーが発生する。

enter image description here

※規定のインスタンスでは、DACのリモート接続ではTCP1433ポートを使用するのでFWのポート受信構成が必要になります。

DACによる接続のエラー(SSMSを使用)

  1. SSMS起動時にDACを指定した場合(接続不可)
    enter image description here

    enter image description here
上記エラーが発生。
SSMSではDAC使えないのかと悩むエラー表示…
→ SSMS起動後に「データベース エンジン クエリ」を追加して接続先としてDACを指定すれば接続可能です!!
  1. クエリの接続先変更でDACを指定した場合(エラーは出るが接続可!!)
    SSMSを予め起動(任意の接続先)している状態で、新規クエリを開いて接続先の変更を行い、DACによる接続を指定する。
    enter image description here
enter image description here

enter image description here

「サーバーに接続できませんでした。」というエラーメッセージが表示されるが、接続はされておりクエリの実行も可能。
(SSMSのバグ? v17.9.1)
  1. 既にDACに接続されている場合
    enter image description here

    Microsoft DocのDACの解説でも以下のように接続数に制限があることが明記されている。
接続に使用できるリソースを確保するために、DAC は 1 つの SQL Serverのインスタンスにつき 1 つしか許可されません。DAC
接続が既にアクティブな場合は、DAC を使用して接続する新たな要求は、エラー 17810 で拒否されます。

まとめ

既定のインスタンスに対して、DACによる接続方法をまとめてみた。
SSMSで接続できることになってるけど、知らないと接続エラーで苦しめられそう…
実行出来るクエリに制限があるそうですが追々調べていきます。

次回は「名前付きインスタンス」でDAC接続をやってみます。


12/25追記: TCP1434ポートの受信許可が必要であることに気が付きました。
実験しているときは、特に設定していませんでしたが、DACの接続は出来ていました…
remote admin connections サーバー構成オプション
を参照しますと、
既定では、DAC はループバック IP アドレス (127.0.0.1)、ポート 1434 だけをリッスンします。 TCP ポート 1434 を使用できない場合は、 データベース エンジン の起動時に TCP ポートが動的に割り当てられます。
複数の SQL> Server インスタンスがコンピューターにインストールされている場合、TCP ポート番号についてはエラー ログを確認してください。
試にKaspersky パケットルールでTCP1434を明示的にブロックしてからDAC接続してみましたがTCP1434で接続しています…
(netstat -a で確認)
Kaspersky のパケットルールがおかしいのか…
名前付きインスタンスのリモート接続用にUDPの1434ポートを受信許可していることが関連するのかわかりませんが少し気持ち悪い。
70-462のテキスト上はDAC接続ではTCP1434で受信許可することになっていますので注意すること。

参考

Microsoft Document: データベース管理者用の診断接続
Microsoft Document: remote admin connections サーバー構成オプション
Dedicated Admin Connection(DAC) from SSMS
SQL Server の専用管理者接続について

0 件のコメント:

コメントを投稿