Skip to main content
Glama

mcp-dbutils

MIT License
81
  • Linux
  • Apple
write-operations.md4.65 kB
# 数据库写操作功能 MCP-DBUtils 2.0.0 版本引入了数据库写操作功能,允许在严格控制的条件下执行数据库写操作(INSERT、UPDATE、DELETE)。 ## 功能特点 1. **默认只读**:所有数据库连接默认为只读模式,必须显式配置才能启用写操作。 2. **细粒度权限控制**:支持表级和操作级的细粒度权限控制。 3. **审计日志**:所有写操作都会记录详细的审计日志,包括操作类型、影响的表、SQL语句、执行结果等。 4. **交互式确认**:执行写操作时需要显式确认,防止意外修改数据。 5. **事务支持**:支持事务操作,确保数据一致性。 ## 配置写操作 在配置文件中,可以为每个数据库连接单独配置写操作权限: ```yaml connections: example_db: type: sqlite path: "data/example.db" # 启用写操作 writable: true # 细粒度写权限控制 write_permissions: # 默认策略:read_only 或 allow_all default_policy: "read_only" # 表级权限 tables: users: # 允许的操作类型 operations: ["INSERT", "UPDATE"] logs: operations: ["INSERT", "UPDATE", "DELETE"] ``` ### 配置选项 - `writable`:是否允许写操作,默认为 `false`(只读)。 - `write_permissions`:细粒度写权限配置。 - `default_policy`:默认策略,可选值为 `read_only`(只读)或 `allow_all`(允许所有写操作)。 - `tables`:表级权限配置,可以为每个表指定允许的操作类型。 ### 表名大小写处理 MCP-DBUtils 在处理表名时采用大小写不敏感的比较策略: - 在配置文件中,表名可以使用任意大小写(如 `users`、`Users` 或 `USERS`)。 - 在 SQL 语句中,表名同样可以使用任意大小写。 - 系统会自动将表名转换为小写进行比较,确保大小写不影响权限检查。 例如,以下配置和 SQL 语句都能正确匹配: ```yaml # 配置文件中使用小写表名 tables: users: operations: ["INSERT", "UPDATE"] ``` ```sql -- SQL 语句中使用大写表名,仍然能正确匹配权限 INSERT INTO USERS (id, name) VALUES (1, 'test'); ``` ## 使用写操作工具 MCP-DBUtils 提供了 `dbutils-execute-write` 工具用于执行写操作: ```json { "name": "dbutils-execute-write", "arguments": { "connection": "example_db", "sql": "INSERT INTO logs (event, timestamp) VALUES ('event1', CURRENT_TIMESTAMP)", "confirmation": "CONFIRM_WRITE" } } ``` ### 参数说明 - `connection`:数据库连接名称。 - `sql`:SQL写操作语句(INSERT、UPDATE、DELETE)。 - `confirmation`:确认字符串,必须为 `CONFIRM_WRITE`。 ## 审计日志 所有写操作都会记录详细的审计日志,可以通过 `dbutils-get-audit-logs` 工具查询: ```json { "name": "dbutils-get-audit-logs", "arguments": { "connection": "example_db", "table": "logs", "operation_type": "INSERT", "status": "SUCCESS", "limit": 100 } } ``` ### 参数说明 - `connection`:(可选)按数据库连接名称过滤。 - `table`:(可选)按表名过滤。 - `operation_type`:(可选)按操作类型过滤(INSERT、UPDATE、DELETE)。 - `status`:(可选)按操作状态过滤(SUCCESS、FAILED)。 - `limit`:(可选)返回记录数量限制,默认为 100。 ### 审计日志配置 可以在配置文件中自定义审计日志行为: ```yaml audit: enabled: true file_storage: enabled: true path: "logs/audit" max_file_size: 10485760 # 10MB backup_count: 10 memory_buffer: size: 1000 # 内存中保存的最近日志记录数量 content: sanitize_sql: true # 是否对SQL语句进行脱敏处理 include_user_context: true # 是否包含用户上下文信息 ``` ## 安全最佳实践 1. **最小权限原则**:只为必要的表和操作启用写权限。 2. **定期审计**:定期检查审计日志,监控数据库写操作。 3. **使用事务**:对于多步骤操作,使用事务确保数据一致性。 4. **参数化查询**:使用参数化查询防止SQL注入攻击。 5. **备份数据**:在执行重要写操作前备份数据。 ## 注意事项 - 写操作功能是一项高风险功能,请谨慎使用。 - 所有写操作都会记录审计日志,包括操作类型、影响的表、SQL语句、执行结果等。 - 执行写操作时需要显式确认,防止意外修改数据。 - 默认情况下,所有数据库连接都是只读的,必须显式配置才能启用写操作。

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