すべてのプロダクト
Search
ドキュメントセンター

Data Management:HTTPS経由でデータベースインスタンスにアクセスする

最終更新日:Aug 19, 2024

このトピックでは、データベースインスタンスに対してセキュアアクセスプロキシ機能を有効にした後、HTTPS経由でデータベースインスタンスにアクセスする方法について説明します。

前提条件

  • セキュアアクセスプロキシ機能は、データベースインスタンスに対して有効になっています。

    説明

    データベースインスタンスに対してセキュアアクセスプロキシ機能が有効になっているかどうかを確認するには、次の手順を実行します。データ管理 (DMS) コンソールにログインします。 上部のナビゲーションバーで、[セキュリティと仕様] > [セキュアアクセスプロキシ] > [プロキシリスト] を選択します。 [プロキシリスト] ページの [作成済み] タブに、セキュアアクセスプロキシ機能が有効になっているインスタンスが表示されます。 データベースインスタンスでこの機能を有効にする方法の詳細については、「セキュアアクセスプロキシ機能の有効化」をご参照ください。

  • プロキシエンドポイントを使用してデータベースインスタンスにアクセスする権限があります。

    説明

    データベースインスタンスの [詳細] ページで、データベースインスタンスの許可ユーザーであるかどうかを確認します。 許可されたユーザーでない場合は、プロキシエンドポイントを使用してデータベースインスタンスにアクセスするためのアクセス許可を申請します。 詳細については、「プロキシエンドポイントを使用したデータベースインスタンスへのアクセス許可の申請」をご参照ください。

使用上の注意

データベースインスタンスがSecurity Collaborationモードで管理されている場合、セキュリティルールの影響を受けます。 クエリごとに最大100,000行を返すことができます。

クエリごとに返される行の最大数を設定します。

データ管理 (DMS) コンソールにログインします。 上部のナビゲーションバーで、[セキュリティと仕様] > [セキュリティルール] を選択します。 MySQLエンジンタイプを見つけ、[操作] 列の [編集] をクリックします。 左側のナビゲーションウィンドウで、[セキュリティと仕様]> [Secure Access Proxy] を選択します。 次に、クエリごとに返される行の最大数を変更します。

image

説明
  • データベースインスタンスがセキュリティルールの影響を受けないようにする場合は、データベースコンソールで提供される接続アドレスを使用してデータベースインスタンスにアクセスするか、DMSテクニカルサポートに連絡して特定のシナリオを評価してください。

  • データベースインスタンスがSecurity Collaborationモードで管理されていない場合、クエリごとに返される行の最大数をカスタマイズすることはできません。 デフォルトでは、各クエリに返される行の最大数は3000です。

リクエストパラメーター

パラメーター

説明

必須

割り当て方法

accessId

AccessID

必須

次のいずれかの方法を使用して、このパラメーターの値を渡すことができます。

  • このパラメーターをクエリ文字列に含めます。

    例:? accessId=AccessKey ID

  • このパラメーターをリクエストヘッダーに含めます。

    例: accessId:AccessKey ID

accessSecret

AccessSecret

必須

次のいずれかの方法を使用して、このパラメーターの値を渡すことができます。

  • このパラメーターをクエリ文字列に含めます。

    例:? accessSecret=AccessKey secret

  • このパラメーターをリクエストヘッダーに含めます。

    例: accessSecret:AccessKey secret

schema

データベース名

任意

次のいずれかの方法を使用して、このパラメーターの値を渡すことができます。

  • このパラメーターをURLに含めます。

    例: /server/[データベース名]

  • このパラメーターをリクエスト本文に含めます。

    例: { "schema": "[データベース名]"}

sql

SQL 文

必須

次のいずれかの方法を使用して、このパラメーターの値を渡すことができます。

  • このパラメーターをURLに含めます。

  • このパラメーターをリクエスト本文に含めます。

    例: テキスト形式: [SQL文]

    JSON形式: { "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リクエスト構文 postmanget

    POSTリクエスト構文 postmanpost