全部產品
Search
文件中心

Data Management:通過HTTPS協議訪問執行個體

更新時間:Jul 05, 2025

本文介紹如何通過HTTPS協議訪問已開啟安全訪問代理的目標執行個體。

前提條件

  • 執行個體已開啟安全訪問代理。

    說明

    安全與規範 > 安全訪問代理已開通頁面,查看已開啟安全訪問代理的執行個體列表。如需開啟,請參見開啟安全訪問代理

  • 您已獲得安全訪問代理的授權。

    說明

    在安全訪問代理的詳情頁面,查看執行個體的授權情況。如果您還沒有獲得授權,請參見申請安全訪問代理授權

注意事項

開啟安全訪問代理的安全協同執行個體受安全規則的限制,建議您將單次查詢的返回資料行數限制為最多3000行。若查詢的資料行數過多,DMS將不保證穩定性。

說明
  • 若希望避免安全規則的限制,請使用資料庫控制台提供的串連地址訪問資料庫,或聯絡DMS支援人員評估具體情境。

  • 如果是非安全協同執行個體,不支援自主配置查詢最大返回行數。預設查詢最大返回行數為3000。

請求參數說明

參數名

含義

是否必須

傳遞方式

accessId

AccessID

accessId支援以下傳值方式:

  • Query參數。

    例如:?accessId=AccessID

  • Header參數。

    例如:accessId:AccessID

accessSecret

AccessSecret

accessSecret支援以下傳值方式:

  • Query參數。

    例如:?accessSecret=AccessSecret

  • Header參數。

    例如:accessSecret:AccessSecret

schema

資料庫名稱

schema支援以下傳值方式:

  • URL路徑參數。

    例如:/server/[您的資料庫名]

  • Body參數。

    例如:{ "schema": "[您的資料庫名]" }

sql

SQL語句

SQL支援以下傳值方式:

  • URL參數。

  • Body參數。

    例如:純文字格式:[您的SQL語句]

    JSON格式:{ "sql": "[您的SQL語句]" }

傳回值說明

通過HTTPS協議訪問,以JSON格式返回資料。

JSON對象格式如下:

欄位名

類型

描述

columnMetas

Array

欄位元資訊列表。

columnName

String

欄位名。

columnLabel

String

欄位標籤,對應SQL語句中as後的別名,沒有別名時,則與columnName一致。

columnTypeName

String

欄位類型,例如VARCHAR,BIGINT等。

precision

Integer

精度,部分欄位類型包含精度定義,例如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
    }

訪問樣本

您可以通過命令列、資料庫管理工具、程式碼來訪問已開啟安全訪問代理的目標執行個體。

假設串連地址為dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com,資料庫名稱為database,accessId為user,accessSecret為pwd,SQL命令為show databases。

  • 使用CURL命令列訪問的樣本。

    # GET請求
    curl 'https://[您的串連地址]/server/[您的資料庫名]?accessId=[您的AccessID]&accessSecret=[您的AccessSecret]&sql=[SQL語句]'
    # GET請求樣本
    curl 'https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW%20DATABASES'
    # POST請求
    curl 'https://[您的串連地址]/server/[您的資料庫名]' -H 'accessId:[您的AccessID]' -H 'accessSecret:[您的AccessSecret] -H 'Content-Type:text/plain' -d '[SQL語句]'
    # POST請求樣本
    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程式訪問的樣本。

    說明

    以Python 2版本訪問舉例。

    GET請求:

    import requests
    
    url = "https://[串連地址]/server/[您的資料庫名]?accessId=[您的AccessID]&accessSecret=[您的AccessSecret]&sql=[sql語句]"
    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://[串連地址]/server/[您的資料庫名]"
    headers = {
        "Content-Type": "text/plain;charset=utf-8",
        "accessId": "[您的AccessID]",
        "accessSecret": "[您的AccessSecret]"
    }
    print requests.post(url, headers=headers, data='[sql語句]').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://[串連地址]/server/[您的資料庫名]?accessId=[您的AccessID]&accessSecret=[您的AccessSecret]&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: '[串連地址]',
        port: 443,
        path: '/server/[您的資料庫名]',
        method: 'POST',
        headers: {
            'Content-Type': 'text/plain; charset=UTF-8',
            accessId: '[您的AccessID]',
            accessSecret: '[您的AccessSecret]'
        }
    }, resp => {
        resp.on("data", data => {
            console.log(JSON.parse(data));
        });
    });
    req.write("[sql語句]");
    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