Skip to main content
Glama

mcp-dbutils

MIT License
81
  • Linux
  • Apple
security.md9.39 kB
# 安全架构 *[English](../../en/technical/security.md) | 中文 | [Français](../../fr/technical/security.md) | [Español](../../es/technical/security.md) | [العربية](../../ar/technical/security.md) | [Русский](../../ru/technical/security.md)* ## 通信模式与安全架构 MCP数据库工具服务实现了一套安全的通信模式,旨在每一步都保护您的数据安全。下图展示了数据在各组件之间的流动方式,同时保持安全性: ```mermaid flowchart LR subgraph User["用户环境"] Client["AI客户端<br>(Claude/Cursor)"] ConfigFile["配置文件<br>(YAML)"] end subgraph MCP["MCP数据库工具"] MCPService["MCP服务"] ConnectionManager["连接管理器"] QueryProcessor["查询处理器<br>(只读)"] end subgraph Databases["数据库层"] DB1["数据库1"] DB2["数据库2"] DBn["数据库n"] end %% 通信流程 Client-- "步骤1:<br>数据请求<br>(自然语言)" -->MCPService ConfigFile-. "启动时加载<br>(连接详情)" .->MCPService MCPService-- "步骤2:<br>处理请求" -->ConnectionManager ConnectionManager-- "步骤3:<br>打开连接<br>(按需)" -->Databases ConnectionManager-- "步骤4:<br>发送查询<br>(仅SELECT)" -->QueryProcessor QueryProcessor-- "步骤5:<br>执行查询" -->Databases Databases-- "步骤6:<br>返回结果" -->QueryProcessor QueryProcessor-- "步骤7:<br>格式化结果" -->MCPService MCPService-- "步骤8:<br>传递结果" -->Client ConnectionManager-- "步骤9:<br>关闭连接<br>(完成后)" -->Databases %% 样式 classDef user fill:#e1f5fe,stroke:#01579b,stroke-width:2px,color:#01579b classDef mcp fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#2e7d32 classDef db fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#e65100 class User user class MCP mcp class Databases db %% 添加安全说明 style ConnectionManager stroke-dasharray: 5 5 style QueryProcessor stroke-dasharray: 5 5 ``` ## 核心安全特性 1. **隔离访问流程**: - 您的AI客户端永远不会直接访问您的数据库 - 所有请求都通过受控的MCP服务环境传递 2. **临时连接**: - 仅在需要时才建立数据库连接 - 查询执行后立即关闭连接 - 没有可被利用的持久连接 3. **只读操作**: - 查询处理器强制执行严格的仅SELECT操作 - 不可能修改数据(无INSERT、UPDATE、DELETE) 4. **配置分离**: - 连接详情隔离在单独的配置文件中 - 凭据永远不会暴露给AI模型 5. **多数据库支持**: - 每个数据库连接单独管理 - 数据库通过连接管理器相互隔离 6. **自动超时机制**: - 查询超时防止长时间运行的查询消耗资源 - 连接超时确保数据库连接得到适当管理 - 空闲超时自动关闭不活动的连接 - 全局超时限制会话的总持续时间 这种架构确保即使您将该工具用于多个数据库或用途,每个连接仍然保持安全和隔离,最大限度地减少数据暴露。 ## 故障排除指南 在使用MCP数据库工具时,您可能会遇到以下常见问题。以下是排查和解决这些问题的指南。 ### 连接问题 1. **无法连接到数据库** - 确认您的配置文件中的连接信息是否正确 - 验证您的数据库服务器是否运行并可访问 - 检查网络防火墙是否允许连接 - 对于远程数据库,确认主机名/IP地址和端口是否正确 2. **配置文件错误** - 检查YAML语法是否正确(缩进、冒号等) - 确认所有必需的字段都已提供 - 验证文件路径是否正确(特别是SQLite数据库文件) 3. **权限问题** - 确保提供的数据库用户具有SELECT权限 - 检查用户是否可以访问所需的表和视图 - 对于SQLite,验证文件系统权限是允许读取的 ### 工具和查询问题 1. **查询执行失败** - 检查SQL语法错误 - 确认表名和列名拼写正确 - 验证您的查询仅包含SELECT操作 - 对于复杂查询,尝试拆分成更简单的部分 2. **性能问题** - 避免没有WHERE条件的大表查询 - 使用LIMIT子句限制结果集大小 - 对于复杂的JOIN操作,考虑简化查询 - 使用dbutils-explain-query工具分析查询性能 3. **MCP客户端集成问题** - 确认MCP配置正确(命令和参数) - 检查路径是绝对路径而非相对路径 - 验证uvx或docker能在命令行直接运行 4. **超时问题** - 运行时间过长的查询可能会被超时设置终止 - 在连接设置中配置适当的超时值 - 对于长时间运行的分析查询,请增加查询超时值 ### 日志和诊断 对于高级故障排除,您可以启用详细日志记录: #### 命令行启用调试 ```bash # 启用详细日志 MCP_DEBUG=1 uvx mcp-dbutils --config your_config.yaml ``` #### MCP客户端配置中启用调试 在MCP配置中添加环境变量: **JSON配置示例**: ```json { "dbutils": { "command": "uvx", "args": [ "mcp-dbutils", "--config", "/path/to/your/config.yaml" ], "env": { "MCP_DEBUG": "1" } } } ``` **Cursor MCP配置**: 在Cursor设置 → MCP → 编辑服务器配置中添加环境变量。 #### 查看日志 MCP客户端会处理服务生成的日志。不同的MCP客户端可能在不同位置存储日志: - 对于Claude Desktop:请查看Claude Desktop的应用日志 - 对于Cursor:请查看Cursor的MCP日志部分 - 对于其他客户端:请参考各自客户端的文档了解如何访问MCP服务日志 ### 安全最佳实践 为确保使用MCP数据库工具时的最高安全级别: 1. **使用只读账户**: ```sql -- PostgreSQL示例 CREATE ROLE readonly_user WITH LOGIN PASSWORD 'secure_password'; GRANT CONNECT ON DATABASE analytics TO readonly_user; GRANT USAGE ON SCHEMA public TO readonly_user; GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user; ``` 2. **启用SSL/TLS**: ```yaml connections: secure-db: # ... ssl: mode: verify-full # ... ``` 3. **限制表访问**: ```yaml connections: limited-access: # ... allowed_tables: - public.products - public.categories - analytics.sales ``` 4. **配置适当的超时**: MCP数据库工具提供了三种可配置的超时参数,以确保数据库连接的安全性和资源的有效利用: **查询超时 (query_timeout)**: - **作用**:限制单个SQL查询执行的最大时间。如果查询执行时间超过此值,查询将被自动终止。 - **单位**:秒 - **默认值**:60秒 - **适用场景**:防止复杂查询或大表查询消耗过多资源 - **配置建议**: - 常规查询:30-60秒 - 数据分析查询:300-600秒 - 报表生成:最高1800秒 **连接超时 (connection_timeout)**: - **作用**:限制建立数据库连接的最大等待时间。如果在此时间内无法建立连接,将返回连接错误。 - **单位**:秒 - **默认值**:10秒 - **适用场景**:网络不稳定或数据库负载高的环境 - **配置建议**: - 本地数据库:5-10秒 - 远程数据库:15-30秒 - 高负载环境:最高60秒 **空闲超时 (idle_timeout)**: - **作用**:定义连接在空闲多长时间后自动关闭。这有助于释放未使用的连接资源。 - **单位**:秒 - **默认值**:300秒(5分钟) - **适用场景**:管理连接池中的空闲连接 - **配置建议**: - 高频使用:600-1200秒 - 一般使用:300-600秒 - 低频使用:60-180秒 **参数关系**: - 通常 idle_timeout > query_timeout > connection_timeout - 如果您的查询需要长时间运行,请确保 query_timeout 足够长 - 如果 idle_timeout 太短,可能会导致频繁的连接创建和销毁,影响性能 **配置示例**: ```yaml connections: analytics-db: type: postgres host: analytics.example.com port: 5432 dbname: analytics user: analyst password: secure_password # 超时配置(所有值均为秒) query_timeout: 300 # 允许长时间运行的分析查询 connection_timeout: 15 # 远程数据库连接等待时间 idle_timeout: 600 # 保持连接活跃以便频繁查询 ``` **注意事项**: - 设置过短的超时可能导致合法查询被中断 - 设置过长的超时可能导致资源浪费和潜在的安全风险 - 根据您的具体使用场景和数据库性能调整这些值 ### 获取帮助 如果您在使用过程中遇到问题,以下资源可能会有所帮助: 1. **项目文档**:首先查看最新的[项目文档](https://github.com/donghao1393/mcp-dbutils)以获取使用指南和已知问题 2. **GitHub Issues**:搜索或[提交新issue](https://github.com/donghao1393/mcp-dbutils/issues)报告错误或请求帮助 3. **GitHub Discussions**:参与[讨论区](https://github.com/donghao1393/mcp-dbutils/discussions)获取社区支持或分享使用经验

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/donghao1393/mcp-dbutils'

If you have feedback or need assistance with the MCP directory API, please join our Discord server