本文介紹如何通過HTTPS協議訪問已開啟安全訪問代理的目標執行個體。
前提條件
執行個體已開啟安全訪問代理。
說明在的已開通頁面,查看已開啟安全訪問代理的執行個體列表。如需開啟,請參見開啟安全訪問代理。
您已獲得安全訪問代理的授權。
說明在安全訪問代理的詳情頁面,查看執行個體的授權情況。如果您還沒有獲得授權,請參見申請安全訪問代理授權。
注意事項
開啟安全訪問代理的安全協同執行個體受安全規則的限制,建議您將單次查詢的返回資料行數限制為最多3000行。若查詢的資料行數過多,DMS將不保證穩定性。
若希望避免安全規則的限制,請使用資料庫控制台提供的串連地址訪問資料庫,或聯絡DMS支援人員評估具體情境。
如果是非安全協同執行個體,不支援自主配置查詢最大返回行數。預設查詢最大返回行數為3000。
請求參數說明
參數名 | 含義 | 是否必須 | 傳遞方式 |
accessId | AccessID | 是 | accessId支援以下傳值方式:
|
accessSecret | AccessSecret | 是 | accessSecret支援以下傳值方式:
|
schema | 資料庫名稱 | 否 | schema支援以下傳值方式:
|
sql | 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).textGET請求樣本:
import requests url = "https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW DATABASES" print requests.get(url).textPOST請求:
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語句]').textPOST請求樣本:
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').textNode.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請求:

POST請求:
