数据库 MCP 实战:AI 安全连接内网 MySQL/PostgreSQL 的接入方案

简介: 本文提出“数据库MCP + HTTPS内网穿透”工程方案,解决AI Agent安全访问内网数据库难题:仅暴露带IP/Basic/区域策略的MCP入口,数据库本身不对外暴露,兼顾安全性与实用性。(239字)

数据库通常在公司内网,而 Cursor、Claude Code、Codex 这类 AI Agent 运行在本地或公网。让 Agent 基于真实数据工作,关键问题不是「AI 会不会写 SQL」,而是「怎么安全地让 AI 触达内网数据库」。

本文给出一个可直接复现的工程方案:数据库 MCP + HTTPS 内网穿透。公网只暴露一个带安全策略的 MCP 入口,数据库本身不暴露。按「方案对比 → 架构 → 五步实操 → 安全边界」展开。


01 方案对比

方案

优点

风险 / 成本

把 3306/5432 映射公网

简单直接

暴露在全球扫描与暴力破解之下,账号泄露即整库风险

VPN 全员接入

终端统一接入内网

安装、策略与外包账号运维成本高,临时值班 / 外包偏重

数据库 MCP + HTTPS 穿透

公网只暴露 MCP 入口,数据库仍内网访问

需要正确配置安全策略(IP / Basic / 区域)

核心原则:数据库不暴露,暴露的只是一个带安全策略的 MCP 入口。收益是攻击面大幅缩小,代价是必须认真配置入口安全,不能只建隧道不加策略。


02 架构与安全边界

整体链路:Cursor(本地)→ ZeroNews HTTPS 隧道(公网)→ 内网 MCP Server(mcp-proxy,监听 8002/8003)→ MySQL / PostgreSQL(内网,不暴露端口)。

ZeroNews 内网穿透(零讯)是一个企业级安全内网穿透与反向代理平台,几分钟即可为内网 MCP Server 提供固定 HTTPS 公网端点,用户侧无需安装客户端软件;并支持 IP 黑白名单、BasicAuth、地址围栏等策略叠加,把公网访问范围限制在可控区间。



03 实操:五步接入

前置条件:Linux 服务器一台(以 Ubuntu 为例);内网可访问的 MySQL / PostgreSQL 数据库,建议最小权限只读账号;ZeroNews 账号与客户端;本地 Cursor。

第 1 步:安装 ZeroNews 客户端

在运行 MCP Server 的 Linux 服务器上,登录 ZeroNews 控制台 → 快速开始 → Linux,复制安装命令(Token 替换为你自己的):

curl -SLk https://download.zeronews.cc/linux/zeronews-install.sh | sudo sh -s install <你的安装Token>

后台启动并确认在线:

zeronews service start

第 2 步:安装 Node.js / npx

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
node -v    # 应类似 v20.x.x
npm -v
npx -v

第 3 步:安装并启动 MySQL / PostgreSQL 能力包

MySQL(8002 端口):

npm install -g @benborla29/mcp-server-mysql
export MYSQL_HOST=127.0.0.1
export MYSQL_PORT=3306
export MYSQL_USER=readonly_user
export MYSQL_PASS='你的密码'
export MYSQL_DB=your_database
npx -y mcp-proxy --host 127.0.0.1 --port 8002 -- npx -y @benborla29/mcp-server-mysql

PostgreSQL(8003 端口,与 MySQL 并存时用不同端口;该能力包默认只读,带行数上限与语句超时):

npm install -g @database-mcp/postgres
export POSTGRES_HOST=127.0.0.1
export POSTGRES_PORT=5432
export POSTGRES_USER=readonly_user
export POSTGRES_PASSWORD='你的密码'
export POSTGRES_DATABASE=your_database
npx -y mcp-proxy --host 127.0.0.1 --port 8003 -- npx -y @database-mcp/postgres

第 4 步:添加固定域名与 HTTPS 隧道

ZeroNews 控制台 → 自定义域名 → 添加域名(如 mydb25、pgdb25);再 → 隧道管理 → 添加隧道,参数:协议 HTTPS,内网 IP 127.0.0.1,内网端口 8002 / 8003,绑定设备选安装 MCP Server 的客户端,公网域名选刚添加的域名,带宽 2M。

完成后即可通过 https://mydb25.hn.takin.cc/sse、https://pgdb25.hn.takin.cc/sse 连接对应 MCP Server。MySQL 与 PostgreSQL 各用一条隧道、各用一个域名,便于分环境使用。

第 5 步:在 Cursor 中配置 MCP

Cursor 设置 → Customize → MCPs → New MCP Server,在 mcp.json 填入隧道地址:

{
  "mcpServers": {
    "mydb25": {
      "url": "https://mydb25.hn.takin.cc/sse"
    },
    "pgdb25": {
      "url": "https://pgdb25.hn.takin.cc/sse"
    }
  }
}

Reload Window 后,mydb25、pgdb25 状态为「已连接 / 绿灯」即正常。


04 查询示例

在对话里写清 MCP 名称,Agent 才会经隧道调内网能力包,而不是在本地编造 SQL:

MySQL 开发与联调:用 mydb25,在 userdb 先 DESCRIBE users 或查 INFORMATION_SCHEMA 看字段与索引;再 SELECT id, username, email, created_at FROM users WHERE id = 10001 LIMIT 1。只读。

MySQL 排障与值班:用 mydb25,按订单号 ORD-20250328-001 联查 orders 与 payments:orders 看 status、updated_at、pay_channel;payments 看同 order_no 的 status、amount、paid_at。不要 UPDATE。

PostgreSQL 轻量统计:用 pgdb25,在 userpgdb 的 login_audit 表统计过去 24 小时 action=login_failed 按 ip 聚合次数,ORDER BY count DESC LIMIT 10。

PostgreSQL 注册趋势:用 pgdb25,按 DATE(created_at) 汇总 users 在 2026-03-28 至 2026-04-01 的注册人数,ORDER BY 日期,LIMIT 31。


05 安全配置与三条边界

MCP Server 映射公网后,任何人都能扫描到入口。上线前至少叠加三项策略:Basic 认证(先认证再连接)、IP 白名单(只允许指定 IP)、区域访问控制(只允许指定国家 / 省份),三项在 ZeroNews 控制台即可配置。

同时记住三条安全边界:「不暴露数据库端口」不等于零风险,账号至少用最小权限只读账号;开发库与生产库不要共用同一入口,隧道、域名、权限分开;对话里写清 MCP 名称,AI 才会真查库。


06 使用场景

排障与值班:用户反馈「订单卡在某状态」,让 Agent 查 orders 表并结合日志一起解释;活动或优惠券异常时,让 Agent 统计失败原因字段分布(LIMIT 100),但要控制结果集大小;怀疑复制延迟时,在账号有权限的前提下查 SHOW REPLICA STATUS,与 Shell MCP 互补。

开发与联调:新同事问表结构,Agent 用 INFORMATION_SCHEMA / DESCRIBE 对照 ORM 与真实表;写复杂 SQL 前先探路 JOIN 关系,基于真实外键生成草稿;联调时确认 staging 库测试用户——这类查询只应对开发库隧道开放,不要对生产复用同一入口。

数据与分析:运营临时要「上周注册用户数按天」,简单 GROUP BY 即可,复杂报表仍走 BI;对账前让 Agent 抽样核对未结算账单字段。


小结

判断一个数据库接入方案能不能用,看三件事:数据库有没有暴露公网、入口有没有访问控制、账号是不是最小权限。三条都满足,才值得放进生产环境。

需要提醒的是,MCP + 内网穿透解决的是「安全可达」问题,不是「权限治理」问题:它把暴露面从数据库端口收窄到 MCP 入口,但入口背后的账号权限、审计与配额仍需按数据库规范管理。方案适合开发联调、值班排障、轻量分析三类场景;复杂报表与高风险写操作,建议仍走 BI 与人工流程。

相关文章
|
3月前
|
人工智能 关系型数据库 MySQL
10分钟配置MCP,让AI Agent直接查你的MySQL
从"AI Agent怎么访问数据库"这个现实问题出发,梳理Agent连库方式的演进,讲清MCP协议的原理与价值,用MySQL实战演示如何配置一个MCP Server,并给出权限、安全、审计上的注意事项与避坑清单。
|
存储 编解码 计算机视觉
使用ffmpeg缩小视频体积的几种方式
上述命令将输入视频input.mp4转换为H.265编码格式,并将结果保存为output.mp4文件。其中,-c:v选项表示视频编码器,libx265表示使用x265编码器,-crf选项表示视频质量,28表示目标视频质量,值越小视频质量越高,文件体积越大。
1275 0
|
消息中间件 Java Linux
rocketmq linux注册服务开机启动配置
rocketmq linux注册服务开机启动配置
1300 1
|
存储 NoSQL 应用服务中间件
如何高效存储海量GPS数据
GPS数据使用越来越广,但如何高性能存储海量GPS数据仍然具有挑战,本文会介绍一种非常适合存储GPS数据的存储系统:阿里云NoSQL数据库TableStore,同时会介绍多个不同场景的技术方案。
24582 0
|
21天前
|
SQL 人工智能 自然语言处理
淘宝 AI 购物助手:基于 LLM-as-a-Judge 的在线评测与质量归因实践
淘宝技术为AI购物助手构建了基于LLM-as-a-Judge的在线自动评测体系,通过生产会话清洗、分布式批量推理、六层Rubric标准及人工校准,实现购后服务多业务域的日级质量监控,支撑AI Agent持续可信演进。
淘宝 AI 购物助手:基于 LLM-as-a-Judge 的在线评测与质量归因实践
|
5月前
|
消息中间件 存储 Kafka
Kafka 原生消息入湖能力上线!一键打通实时流与数据湖
阿里云消息队列 Kafka 版正式上线原生消息入湖能力。
662 142
|
21天前
|
人工智能 IDE 开发工具
为了让 Qoder IDE 更流畅,我们做了 39 项优化
本文介绍Qoder IDE性能优化实践:基于“安迪-比尔定律”洞察,利用AI Agent自动发现并修复39项性能问题(如冗余计算、内存浪费),结合自建40场景Benchmark持续监测,macOS综合分提升39.1分。体现AI在写代码之外,更可深度参与性能治理。
242 1
|
21天前
|
存储 缓存 安全
阿里云服务器2核8G/4核16G/8核32G价格指南:实例规格、带宽、云盘收费标准与活动价格
本文将围绕2026年阿里云服务器2核8G、4核16G、8核32G的最新标准收费、活动价格、实例规格选择、带宽与云盘成本、优惠购买方式及注意事项展开系统说明,为采购决策者提供更具参考价值的购买依据。
|
21天前
|
域名解析 网络协议 算法
免费SSL证书申请流程:2026年最新阿里云个人测试证书申请与部署全流程
本文详解阿里云“个人测试证书”(原免费SSL证书)申请全流程:含控制台入口、0元申领20张、域名绑定、DNS验证及CA审核,适用于个人项目与测试环境,有效期90天。阿里云SSL官网:https://t.aliyun.com/U/m0alhG
225 0
|
4月前
|
消息中间件 存储 分布式计算
AutoMQ x 阿里云 OSS Tables:基于 Iceberg 构建流表一体的实时入湖
实时数据入湖效率影响分析时效。传统Kafka→Flink→Iceberg链路需维护同步任务与表优化,成本高、运维重。AutoMQ x OSS Tables新方案实现Kafka Topic自动物化为Iceberg表,并在OSS侧提供托管Catalog与自动化Compaction,端到端简化架构,零额外计算负担,支持Schema演进与CDC Upsert,大幅提升实时入湖可靠性与效率。(239字)
350 0