このトピックでは、パブリック IP アドレスが動的に変更される場合に、ApsaraDB RDS for SQL Server インスタンスに接続している外部サーバーまたはクライアントの接続元パブリック IP アドレスを取得する方法について説明します。データベースが記録する IP アドレスは、ローカルの検索ツールで表示される IP ではなく、パブリックエグレス IP です。そのため、ローカルでクエリした IP をホワイトリストに追加しても、接続に失敗します。
このトピックでは、次の 2 つのシナリオについて説明します。
注意事項
本番環境でクライアントまたは外部サーバーのパブリック IP アドレスが動的に変更される場合は、内部ネットワーク経由で接続するか、IP アドレスホワイトリストに適切な CIDR ブロックを追加することを推奨します。これにより、IP アドレスの変更による切断を防ぐことができます。
シナリオ 1:クライアントのエグレス IP の特定
この方法は、ホワイトリストに追加した IP アドレスが、インスタンスが認識する実際のエグレス IP と一致しないために RDS インスタンスに接続できない場合に使用します。
操作手順
-
RDS インスタンスの IP アドレスホワイトリストに、CIDR ブロック
0.0.0.0/0を追加します。詳細については、「IP アドレスホワイトリストの設定」をご参照ください。重要0.0.0.0/0は、すべての IP アドレスからのインスタンスへのアクセスを許可します。テストが完了したら、このエントリを速やかに削除してください。 -
クライアントから RDS インスタンスに接続します。詳細については、「ApsaraDB RDS for SQL Server インスタンスへの接続」をご参照ください。
-
次のクエリを実行して、プロトコルタイプ (
PROTOCOL_TYPE) とインスタンスが認識するクライアントのパブリック IP アドレス (CLIENT_NET_ADDRESS) を取得します。SELECT CONNECTIONPROPERTY('PROTOCOL_TYPE') AS PROTOCOL_TYPE, CONNECTIONPROPERTY('CLIENT_NET_ADDRESS') AS CLIENT_NET_ADDRESSクエリ結果では、
CLIENT_NET_ADDRESS列に、ホワイトリストに追加するクライアントの実際のエグレス IP アドレスが含まれています。 -
手順 1 で追加した CIDR ブロック
0.0.0.0/0を削除し、CLIENT_NET_ADDRESSが返した IP アドレスをホワイトリストに追加します。
シナリオ 2:接続しているすべての IP アドレスの一覧表示
この方法は、RDS インスタンスへのすべてのアクティブな接続を監査したり、コネクションリークを調査したりする場合に使用します。
操作手順
-
RDS インスタンスの IP アドレスホワイトリストに、CIDR ブロック
0.0.0.0/0を追加します。詳細については、「IP アドレスホワイトリストの設定」をご参照ください。重要0.0.0.0/0は、すべての IP アドレスからのインスタンスへのアクセスを許可します。テストが完了したら、このエントリを速やかに削除してください。 -
クライアントから RDS インスタンスに接続します。詳細については、「ApsaraDB RDS for SQL Server インスタンスへの接続」をご参照ください。
-
次のクエリを実行して、すべてのアクティブな SQL 認証接続を一覧表示します。このクエリは、セッション ID (
SPID)、ログイン名、ログイン時間、ホスト名、クライアントアプリケーション名、TCP ポート、およびクライアントの IP アドレスを返します。SELECT SP.SPID, SP.LOGINAME, SP.LOGIN_TIME, SP.HOSTNAME, SP.PROGRAM_NAME, DC.CLIENT_TCP_PORT, DC.CLIENT_NET_ADDRESS FROM SYS.SYSPROCESSES AS SP INNER JOIN SYS.DM_EXEC_CONNECTIONS AS DC ON SP.SPID = DC.SESSION_ID WHERE SP.SPID > 50 AND DC.AUTH_SCHEME='SQL'フィルター
SP.SPID > 50はシステムプロセスを除外します。DC.AUTH_SCHEME='SQL'は、結果を SQL 認証接続に限定します。 -
IP アドレスホワイトリストから CIDR ブロック
0.0.0.0/0を削除します。
接続パラメーター設定の表示
シナリオ 2 のクエリを実行した後、SPID 値を使用して特定の接続の完全なパラメーター設定を確認します。
SELECT * FROM SYS.DM_EXEC_SESSIONS WHERE SESSION_ID=<The obtained SPID>
<The obtained SPID> を、シナリオ 2 のクエリ結果で取得した SPID 値に置き換えます。
このクエリは、セッションの詳細なパラメーター設定を含む結果セットを返します。