本文介绍如何通过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').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请求:在Postman中使用GET方法请求URL:
https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/[您的数据库名],并在URL params中设置以下参数:accessId为您的AccessID,accessSecret为您的AccessSecret,sql为要执行的SQL语句(例如SHOW DATABASES),然后单击Send发送请求。POST请求:在Postman中将请求方法设为POST,URL设置为
https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/[您的数据库名]。在Headers中添加三个参数:Content-Type设为text/plain、accessId设为您的AccessID、accessSecret设为您的AccessSecret。在Body区域选择raw格式和Text类型,输入SQL语句(如SHOW DATABASES),然后单击Send发送请求。