本文介绍如何通过HTTPS协议访问已开启安全访问代理的目标实例。
前提条件
实例已开启安全访问代理。
说明在开启安全访问代理。
的已开通页面,查看已开启安全访问代理的实例列表。如需开启,请参见您已获得安全访问代理的授权。
说明在安全访问代理的详情页面,查看实例的授权情况。如果您还没有获得授权,请参见申请安全访问代理授权。
注意事项
开启安全访问代理的安全协同实例受安全规则的限制,系统规定单次查询数据最多返回100000行数据。
若希望避免安全规则的限制,请使用数据库控制台提供的连接地址访问数据库,或联系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).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请求:
POST请求: