このトピックでは、データベースインスタンスに対してセキュアアクセスプロキシ機能を有効にした後、HTTPS経由でデータベースインスタンスにアクセスする方法について説明します。
前提条件
セキュアアクセスプロキシ機能は、データベースインスタンスに対して有効になっています。
説明データベースインスタンスに対してセキュアアクセスプロキシ機能が有効になっているかどうかを確認するには、次の手順を実行します。データ管理 (DMS) コンソールにログインします。 上部のナビゲーションバーで、セキュアアクセスプロキシ機能の有効化」をご参照ください。
を選択します。 [プロキシリスト] ページの [作成済み] タブに、セキュアアクセスプロキシ機能が有効になっているインスタンスが表示されます。 データベースインスタンスでこの機能を有効にする方法の詳細については、「プロキシエンドポイントを使用してデータベースインスタンスにアクセスする権限があります。
説明データベースインスタンスの [詳細] ページで、データベースインスタンスの許可ユーザーであるかどうかを確認します。 許可されたユーザーでない場合は、プロキシエンドポイントを使用してデータベースインスタンスにアクセスするためのアクセス許可を申請します。 詳細については、「プロキシエンドポイントを使用したデータベースインスタンスへのアクセス許可の申請」をご参照ください。
使用上の注意
データベースインスタンスがSecurity Collaborationモードで管理されている場合、セキュリティルールの影響を受けます。 クエリごとに最大100,000行を返すことができます。
データベースインスタンスがセキュリティルールの影響を受けないようにする場合は、データベースコンソールで提供される接続アドレスを使用してデータベースインスタンスにアクセスするか、DMSテクニカルサポートに連絡して特定のシナリオを評価してください。
データベースインスタンスがSecurity Collaborationモードで管理されていない場合、クエリごとに返される行の最大数をカスタマイズすることはできません。 デフォルトでは、各クエリに返される行の最大数は3000です。
リクエストパラメーター
パラメーター | 説明 | 必須 | 割り当て方法 |
accessId | AccessID | 必須 | 次のいずれかの方法を使用して、このパラメーターの値を渡すことができます。
|
accessSecret | AccessSecret | 必須 | 次のいずれかの方法を使用して、このパラメーターの値を渡すことができます。
|
schema | データベース名 | 任意 | 次のいずれかの方法を使用して、このパラメーターの値を渡すことができます。
|
sql | SQL 文 | 必須 | 次のいずれかの方法を使用して、このパラメーターの値を渡すことができます。
|
レスポンスパラメーター
HTTPS経由でインスタンスにアクセスすると、データはJSON形式で返されます。
次の表に、JSON形式のレスポンスパラメーターを示します。
パラメーター | データ型 | 説明 |
columnMetas | 配列 | 列のメタデータ。 |
columnName | String | 列の名前。 |
columnLabel | String | 列のラベル。SQL文のAS句で指定されています。 AS句が指定されていない場合、このパラメーターの値はcolumnNameパラメーターの値と同じになります。 |
columnTypeName | String | 列のデータ型 (VARCHARやBIGINTなど) 。 |
精度 | Integer | 列の値の精度。 このパラメーターは、VARCHARなどの一部のデータ型の列に指定できます。 たとえば、VARCHAR(32) は、値の精度が32であることを示します。 |
scale | Integer | 列の値のスケール。 このパラメーターは、浮動小数点データ型の列に指定して、値の小数点の右側の桁数を示すことができます。 例えば、DECIMAL(10,2) は、小数点以下の桁数が2であることを示す。 |
nullable | Boolean | 列を空のままにできるかどうかを示します。 値がtrueの場合は、列を空のままにできることを示します。 falseの値は、列の値を指定する必要があることを示します。 |
autoIncrement | Boolean | 列の値が新しい行ごとに自動的に増加するかどうかを示します。 値がtrueの場合は、その列が自動インクリメント列であることを示します。 値がfalseの場合は、その列が自動インクリメント列ではないことを示します。 |
tableName | String | 列が属するテーブルの名前 |
msg | String | 実行が失敗した場合に返されるエラーメッセージ。 |
updateCount | Integer | DMLステートメントの影響を受けるエントリの数。 |
requestId | String | リクエスト ID。 このパラメーターは、問題のトラブルシューティングに役立ちます。 |
rowCount | Integer | クエリを実行したときに返されるエントリの数。 |
rows | 配列 | クエリを実行したときに返されるエントリ。 配列内の各要素は、データの行を示す。 Arrayデータ型のデータ構造は、ListまたはMapデータ型のデータ構造と同じです。 |
success | Boolean | リクエストが成功したかどうかを示します。 値がtrueの場合は、リクエストが成功したことを示します。 falseの値は、リクエストが失敗したことを示します。 |
レスポンス例:
成功したデータクエリ
{ "columnMetas": [ { "columnName":"column1", "columnLabel":"column1", "columnTypeName":"varchar", "precision":10, "scale":2, "nullable":true, "autoIncrement":true, "tableName":"table1" }, { "columnName":"column2", "columnLabel":"column2", "columnTypeName":"varchar", "precision":10, "scale":2, "nullable":true, "autoIncrement":true, "tableName":"table1" } ], "updateCount": 0, "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi", "rowCount": 1, "rows": [ { "col1": 1, "col2": "xxxx" } ], "success": true }
成功したデータ更新
{ "updateCount": 0, "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi", "success": true }
アクセス失敗
{ "message": 'AccessID is required.', "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi", "success": false }
セキュアアクセスプロキシ機能が有効になっているデータベースインスタンスへのアクセス例
コマンド、SQLクライアント、またはプログラムコードを使用して、セキュアなアクセスプロキシ機能が有効になっているデータベースインスタンスにアクセスできます。
たとえば、s dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.comするインスタンスのドメイン名、アクセスするデータベースの名前はdatabase、AccessKey IDはuser、AccessKey secretはpwd、実行するSQL文はSHOW DATABASESです。
curlコマンドを使用する
# GET request syntax curl 'https://[Instance domain name]/server/[Database name]?accessId=[AccessKey ID]&accessSecret=[AccessKey secret]&sql=[SQL statement]'
# Sample GET request curl 'https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW%20DATABASES'
# POST request syntax curl 'https://[Instance domain name]/server/[Database name]' -H 'accessId:[AccessKey ID]' -H 'accessSecret:[AccessKey secret] -H 'Content-Type:text/plain' -d '[SQL statement]'
# Sample POST request curl 'https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database' -H 'accessId:user' -H 'accessSecret:pwd -H 'Content-Type:text/plain' -d 'SHOW DATABASES'
Python 2プログラムを使用する
説明この例では、Python 2プログラムを使用してデータベースインスタンスにアクセスします。
GETリクエスト構文
import requests url = "https://[Instance domain name]/server/[Database name]?accessId=[AccessKey ID]&accessSecret=[AccessKey secret]&sql=[SQL statement]" print requests.get(url).text
サンプルGETリクエスト
import requests url = "https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW DATABASES" print requests.get(url).text
POSTリクエスト構文
import requests url = "https://[Instance domain name]/server/[Database name]" headers = { "Content-Type": "text/plain;charset=utf-8", "accessId": "[AccessKey ID]", "accessSecret": "[AccessKey secret]" } print requests.post(url, headers=headers, data='[SQL statement]').text
サンプルPOSTリクエスト
import requests url = "https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database" headers = { "Content-Type": "text/plain;charset=utf-8", "accessId": "user", "accessSecret": "pwd" } print requests.post(url, headers=headers, data='SHOW DATABASES').text
Node.jsプログラムを使用する
GETリクエスト構文
const https = require("https"); https.get("https://[Instance domain name]/server/[database name]?accessId=[AccessKey ID]&accessSecret=[AccessKey secret]&sql=SHOW DATABASES", resp => { resp.on("data", data => { console.log(JSON.parse(data)); }); });
サンプルGETリクエスト
const https = require("https"); https.get("https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW DATABASES", resp => { resp.on("data", data => { console.log(JSON.parse(data)); }); });
POSTリクエスト構文
const https = require("https"); var req = https.request({ hostname: '[Instance domain name]', port: 443, path: '/server/[Database name]', method: 'POST', headers: { 'Content-Type': 'text/plain; charset=UTF-8', accessId: '[AccessKey ID]', accessSecret: '[AccessKey secret]' } }, resp => { resp.on("data", data => { console.log(JSON.parse(data)); }); }); req.write("[SQL statement]"); req.end();
サンプルPOSTリクエスト
const https = require("https"); var req = https.request({ hostname: 'dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com', port: 443, path: '/server/database', method: 'POST', headers: { 'Content-Type': 'text/plain; charset=UTF-8', accessId: 'user', accessSecret: 'pwd' } }, resp => { resp.on("data", data => { console.log(JSON.parse(data)); }); }); req.write("SHOW DATABASES"); req.end();
Postmanクライアントを使用する
GETリクエスト構文
POSTリクエスト構文