mcp-dbutils 0.23.1__tar.gz → 1.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/CHANGELOG.md +142 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/PKG-INFO +1 -1
- mcp_dbutils-1.0.1/docs/write-operations.md +122 -0
- mcp_dbutils-1.0.1/docs/zh/configuration-write-operations.md +226 -0
- mcp_dbutils-1.0.1/docs/zh/security-best-practices.md +302 -0
- mcp_dbutils-1.0.1/docs/zh/technical/audit-logging.md +315 -0
- mcp_dbutils-1.0.1/docs/zh/technical/write-operations-design.md +221 -0
- mcp_dbutils-1.0.1/docs/zh/usage-write-operations.md +276 -0
- mcp_dbutils-1.0.1/examples/config.yaml +72 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/pyproject.toml +1 -1
- mcp_dbutils-1.0.1/src/mcp_dbutils/audit.py +269 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/base.py +498 -0
- mcp_dbutils-1.0.1/src/mcp_dbutils/config.py +160 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/mysql/config.py +57 -40
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/mysql/handler.py +60 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/postgres/config.py +40 -22
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/postgres/handler.py +60 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/sqlite/config.py +8 -1
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/sqlite/handler.py +53 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/fixtures.py +3 -0
- mcp_dbutils-1.0.1/tests/test_write_operations.py +426 -0
- mcp_dbutils-1.0.1/tests/unit/test_audit.py +428 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/unit/test_base.py +5 -0
- mcp_dbutils-1.0.1/tests/unit/test_base_extended.py +504 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/unit/test_base_server.py +382 -0
- mcp_dbutils-1.0.1/tests/unit/test_base_write_operations.py +443 -0
- mcp_dbutils-1.0.1/tests/unit/test_init.py +141 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/unit/test_mysql_handler.py +47 -1
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/unit/test_postgres_handler.py +46 -0
- mcp_dbutils-1.0.1/tests/unit/test_sql_parsing.py +79 -0
- mcp_dbutils-1.0.1/tests/unit/test_write_permissions.py +110 -0
- mcp_dbutils-0.23.1/src/mcp_dbutils/config.py +0 -58
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.coveragerc +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/bug_report_ar.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/bug_report_en.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/bug_report_es.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/bug_report_fr.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/bug_report_ru.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/bug_report_zh.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/documentation_improvement_ar.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/documentation_improvement_en.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/documentation_improvement_es.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/documentation_improvement_fr.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/documentation_improvement_ru.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/documentation_improvement_zh.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/feature_request_ar.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/feature_request_en.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/feature_request_es.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/feature_request_fr.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/feature_request_ru.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/feature_request_zh.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/performance_issue_ar.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/performance_issue_en.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/performance_issue_es.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/performance_issue_fr.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/performance_issue_ru.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/performance_issue_zh.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/security_vulnerability_ar.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/security_vulnerability_en.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/security_vulnerability_es.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/security_vulnerability_fr.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/security_vulnerability_ru.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/ISSUE_TEMPLATE/security_vulnerability_zh.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/workflows/code-style.yml +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/workflows/issue-translator.yml +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/workflows/quality-assurance.yml +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.github/workflows/release.yml +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.gitignore +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.pre-commit-config.yaml +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/.releaserc.json +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/Dockerfile +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/LICENSE +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/README.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/README_AR.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/README_EN.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/README_ES.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/README_FR.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/README_RU.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/config.yaml.example +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/coverage.xml +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/configuration.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/examples/README.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/examples/advanced-llm-interactions.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/examples/mysql-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/examples/postgresql-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/examples/sqlite-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/installation-platform-specific.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/installation.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/technical/architecture.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/technical/development.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/technical/security.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/technical/sonarcloud-integration.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/technical/testing.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ar/usage.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/document-consistency-check.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/document-version-history.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/configuration.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/examples/advanced-llm-interactions.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/examples/mysql-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/examples/postgresql-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/examples/sqlite-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/installation-platform-specific.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/installation.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/technical/architecture.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/technical/development.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/technical/security.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/technical/sonarcloud-integration.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/technical/testing.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/en/usage.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/configuration.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/examples/README.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/examples/advanced-llm-interactions.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/examples/mysql-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/examples/postgresql-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/examples/sqlite-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/installation-platform-specific.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/installation.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/technical/architecture.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/technical/development.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/technical/security.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/technical/sonarcloud-integration.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/technical/testing.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/es/usage.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/configuration.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/examples/README.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/examples/advanced-llm-interactions.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/examples/mysql-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/examples/postgresql-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/examples/sqlite-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/installation-platform-specific.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/installation.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/technical/architecture.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/technical/development.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/technical/security.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/technical/sonarcloud-integration.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/technical/testing.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/fr/usage.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/index.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/configuration.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/examples/README.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/examples/advanced-llm-interactions.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/examples/mysql-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/examples/postgresql-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/examples/sqlite-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/installation-platform-specific.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/installation.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/technical/architecture.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/technical/development.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/technical/security.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/technical/sonarcloud-integration.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/technical/testing.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/ru/usage.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/configuration.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/examples/advanced-llm-interactions.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/examples/mysql-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/examples/postgresql-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/examples/sqlite-examples.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/installation-platform-specific.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/installation.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/technical/architecture.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/technical/development.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/technical/security.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/technical/sonarcloud-integration.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/technical/testing.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/docs/zh/usage.md +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/scripts/check_docs_consistency.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/scripts/check_zh_docs.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/scripts/fix_en_nav_links.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/scripts/fix_imports.sh +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/scripts/fix_remaining_issues.sh +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/scripts/fix_zh_nav_links.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/scripts/run_sonar_analysis.sh +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/scripts/sonar-ai-fix.fish +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/smithery.yaml +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/sonar-project.properties +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/__init__.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/log.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/mysql/__init__.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/mysql/server.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/postgres/__init__.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/postgres/server.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/sqlite/__init__.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/sqlite/server.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/src/mcp_dbutils/stats.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/conftest.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/__init__.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/conftest.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_list_connections.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_logging.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_monitoring.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_monitoring_enhanced.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_mysql.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_mysql_config.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_mysql_config_helpers.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_mysql_handler_extended.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_postgres.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_postgres_config.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_prompts.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_sqlite.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_sqlite_config.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_sqlite_handler_extended.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_tools.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/integration/test_tools_advanced.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/unit/test_base_handlers.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/unit/test_base_helpers.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/unit/test_log.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/unit/test_mysql_server.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/unit/test_postgres_server.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/unit/test_sqlite_handler.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/unit/test_sqlite_server.py +0 -0
- {mcp_dbutils-0.23.1 → mcp_dbutils-1.0.1}/tests/unit/test_stats.py +0 -0
@@ -1,3 +1,145 @@
|
|
1
|
+
## [1.0.1](https://github.com/donghao1393/mcp-dbutils/compare/v1.0.0...v1.0.1) (2025-05-04)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* 提高代码覆盖率以解决SonarCloud检查失败问题 ([#90](https://github.com/donghao1393/mcp-dbutils/issues/90)) ([adbc9f2](https://github.com/donghao1393/mcp-dbutils/commit/adbc9f2e6fb54ed446d96775c65edf67611637ed))
|
7
|
+
|
8
|
+
# [1.0.0](https://github.com/donghao1393/mcp-dbutils/compare/v0.23.1...v1.0.0) (2025-05-04)
|
9
|
+
|
10
|
+
|
11
|
+
### Features
|
12
|
+
|
13
|
+
* 添加数据库写操作功能 ([#88](https://github.com/donghao1393/mcp-dbutils/issues/88)) ([7703cdf](https://github.com/donghao1393/mcp-dbutils/commit/7703cdf58dd706b300e5f9a89b1b530274e36fe0))
|
14
|
+
|
15
|
+
|
16
|
+
### BREAKING CHANGES
|
17
|
+
|
18
|
+
* 这个功能将改变项目的核心安全模型,从只读到可配置读写,
|
19
|
+
需要主版本号升级(从1.x.x到2.0.0)。
|
20
|
+
|
21
|
+
* feat: 添加数据库写操作配置支持
|
22
|
+
|
23
|
+
在配置系统中添加对数据库写操作的支持:
|
24
|
+
1. 在ConnectionConfig基类中添加writable和write_permissions属性
|
25
|
+
2. 创建WritePermissions类处理表级和操作级权限控制
|
26
|
+
3. 修改SQLite、PostgreSQL和MySQL配置类以支持写操作配置
|
27
|
+
4. 添加配置验证逻辑确保安全性
|
28
|
+
* 这个功能将改变项目的核心安全模型,从只读到可配置读写,
|
29
|
+
需要主版本号升级(从1.x.x到2.0.0)。
|
30
|
+
|
31
|
+
* feat: 添加数据库写操作基础功能
|
32
|
+
|
33
|
+
在基础类中添加数据库写操作支持:
|
34
|
+
1. 添加写操作相关的常量和错误消息
|
35
|
+
2. 在ConnectionHandler类中添加写操作相关方法
|
36
|
+
3. 添加SQL类型识别和表名提取功能
|
37
|
+
4. 在ConnectionServer类中添加写权限检查方法
|
38
|
+
5. 添加dbutils-execute-write工具和处理函数
|
39
|
+
* 这个功能将改变项目的核心安全模型,从只读到可配置读写,
|
40
|
+
需要主版本号升级(从1.x.x到2.0.0)。
|
41
|
+
|
42
|
+
* feat: 添加数据库写操作实现
|
43
|
+
|
44
|
+
在各数据库处理器中实现写操作功能:
|
45
|
+
1. 在SQLite处理器中添加_execute_write_query方法
|
46
|
+
2. 在PostgreSQL处理器中添加_execute_write_query方法
|
47
|
+
3. 在MySQL处理器中添加_execute_write_query方法
|
48
|
+
4. 添加事务支持和错误处理
|
49
|
+
* 这个功能将改变项目的核心安全模型,从只读到可配置读写,
|
50
|
+
需要主版本号升级(从1.x.x到2.0.0)。
|
51
|
+
|
52
|
+
* feat: 添加数据库写操作审计日志系统
|
53
|
+
|
54
|
+
1. 创建审计日志系统,记录所有数据库写操作
|
55
|
+
2. 添加审计日志配置和过滤功能
|
56
|
+
3. 在ConnectionHandler.execute_write_query方法中集成审计日志
|
57
|
+
4. 添加dbutils-get-audit-logs工具,用于查询审计日志
|
58
|
+
5. 实现_handle_get_audit_logs方法,处理审计日志查询
|
59
|
+
* 这个功能将改变项目的核心安全模型,从只读到可配置读写,
|
60
|
+
需要主版本号升级(从1.x.x到2.0.0)。
|
61
|
+
|
62
|
+
* docs: 添加数据库写操作文档和配置示例
|
63
|
+
|
64
|
+
1. 添加数据库写操作功能文档,包括配置、使用方法和安全最佳实践
|
65
|
+
2. 添加配置文件示例,包含写操作和审计日志配置
|
66
|
+
* 这个功能将改变项目的核心安全模型,从只读到可配置读写,
|
67
|
+
需要主版本号升级(从1.x.x到2.0.0)。
|
68
|
+
|
69
|
+
* test: 添加数据库写操作测试用例
|
70
|
+
|
71
|
+
1. 测试成功执行写操作
|
72
|
+
2. 测试只读连接的写操作
|
73
|
+
3. 测试没有确认的写操作
|
74
|
+
4. 测试不支持的写操作
|
75
|
+
5. 测试未授权表的写操作
|
76
|
+
6. 测试未授权操作的写操作
|
77
|
+
7. 测试获取审计日志
|
78
|
+
* 这个功能将改变项目的核心安全模型,从只读到可配置读写,
|
79
|
+
需要主版本号升级(从1.x.x到2.0.0)。
|
80
|
+
|
81
|
+
* fix: 修复CI错误和测试问题
|
82
|
+
|
83
|
+
1. 修复代码风格问题:导入排序和嵌套if语句
|
84
|
+
2. 修复测试文件中的方法名称问题,将_handle_call_tool改为handle_call_tool
|
85
|
+
3. 在测试类中实现新的抽象方法_execute_write_query
|
86
|
+
|
87
|
+
* fix: 修复测试文件中的方法名称问题,将handle_call_tool改为_handle_call_tool
|
88
|
+
|
89
|
+
* fix: 修复测试文件中的方法名称问题,将_handle_call_tool改为handle_call_tool
|
90
|
+
|
91
|
+
* fix: 修复测试文件中的方法调用问题,使用正确的内部方法
|
92
|
+
|
93
|
+
* fix: 修复测试文件中的方法调用问题,使用handle_call_tool替代内部方法
|
94
|
+
|
95
|
+
* fix: 修复测试文件中的方法调用问题,添加handle_call_tool方法
|
96
|
+
|
97
|
+
* fix: 修复测试文件中的方法调用问题,添加特殊处理CREATE TABLE语句和实现execute_write功能
|
98
|
+
|
99
|
+
* fix: 修复测试文件中的表名大小写问题
|
100
|
+
|
101
|
+
* fix: 修复测试文件中的数据库连接问题,使用文件数据库代替内存数据库
|
102
|
+
|
103
|
+
* fix: 修复测试文件中的审计日志问题,添加log_write_operation调用
|
104
|
+
|
105
|
+
* fix: 修复代码风格和安全问题,解决CI失败
|
106
|
+
|
107
|
+
* fix: 修复代码风格问题,使用ruff自动修复导入顺序
|
108
|
+
|
109
|
+
* test: 增加MySQL和PostgreSQL处理程序的写操作测试,提高代码覆盖率
|
110
|
+
|
111
|
+
* test: 增加ConnectionServer类的写操作和审计日志测试,提高代码覆盖率
|
112
|
+
|
113
|
+
* style: 修复ruff检查中的SIM117问题,使用单个with语句替代嵌套with语句
|
114
|
+
|
115
|
+
* test: 修复ConnectionServer类的写操作和审计日志测试,模拟所需方法
|
116
|
+
|
117
|
+
* test: 修复测试中的get_handler.called属性错误
|
118
|
+
|
119
|
+
* fix: 修复正则表达式中的安全热点问题,避免潜在的回溯问题
|
120
|
+
|
121
|
+
* test: 增加审计日志模块的测试,提高代码覆盖率
|
122
|
+
|
123
|
+
* test: 增加base模块写操作相关方法的测试,提高代码覆盖率
|
124
|
+
|
125
|
+
* style: 修复ruff检查中的导入排序和嵌套with语句问题
|
126
|
+
|
127
|
+
* style: 修复ruff检查中的导入排序和嵌套with语句问题(第二次)
|
128
|
+
|
129
|
+
* test: 修复base模块写操作相关方法的测试,解决测试失败问题
|
130
|
+
|
131
|
+
* style: 修复ruff检查中的嵌套with语句问题
|
132
|
+
|
133
|
+
* fix: 修复ConnectionServer类中的_get_sql_type和_extract_table_name方法,解决测试失败问题
|
134
|
+
|
135
|
+
* fix: 修复测试中的AsyncMock问题,确保_check_write_permission方法的异步调用正确
|
136
|
+
|
137
|
+
* fix: 修复_handle_execute_write方法中的_get_config_or_raise调用,确保测试通过
|
138
|
+
|
139
|
+
* test: 添加SQL解析和写权限检查的测试,提高代码覆盖率
|
140
|
+
|
141
|
+
* style: 修复导入排序问题
|
142
|
+
|
1
143
|
## [0.23.1](https://github.com/donghao1393/mcp-dbutils/compare/v0.23.0...v0.23.1) (2025-05-03)
|
2
144
|
|
3
145
|
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# 数据库写操作功能
|
2
|
+
|
3
|
+
MCP-DBUtils 2.0.0 版本引入了数据库写操作功能,允许在严格控制的条件下执行数据库写操作(INSERT、UPDATE、DELETE)。
|
4
|
+
|
5
|
+
## 功能特点
|
6
|
+
|
7
|
+
1. **默认只读**:所有数据库连接默认为只读模式,必须显式配置才能启用写操作。
|
8
|
+
2. **细粒度权限控制**:支持表级和操作级的细粒度权限控制。
|
9
|
+
3. **审计日志**:所有写操作都会记录详细的审计日志,包括操作类型、影响的表、SQL语句、执行结果等。
|
10
|
+
4. **交互式确认**:执行写操作时需要显式确认,防止意外修改数据。
|
11
|
+
5. **事务支持**:支持事务操作,确保数据一致性。
|
12
|
+
|
13
|
+
## 配置写操作
|
14
|
+
|
15
|
+
在配置文件中,可以为每个数据库连接单独配置写操作权限:
|
16
|
+
|
17
|
+
```yaml
|
18
|
+
connections:
|
19
|
+
example_db:
|
20
|
+
type: sqlite
|
21
|
+
path: "data/example.db"
|
22
|
+
# 启用写操作
|
23
|
+
writable: true
|
24
|
+
# 细粒度写权限控制
|
25
|
+
write_permissions:
|
26
|
+
# 默认策略:read_only 或 allow_all
|
27
|
+
default_policy: "read_only"
|
28
|
+
# 表级权限
|
29
|
+
tables:
|
30
|
+
users:
|
31
|
+
# 允许的操作类型
|
32
|
+
operations: ["INSERT", "UPDATE"]
|
33
|
+
logs:
|
34
|
+
operations: ["INSERT", "UPDATE", "DELETE"]
|
35
|
+
```
|
36
|
+
|
37
|
+
### 配置选项
|
38
|
+
|
39
|
+
- `writable`:是否允许写操作,默认为 `false`(只读)。
|
40
|
+
- `write_permissions`:细粒度写权限配置。
|
41
|
+
- `default_policy`:默认策略,可选值为 `read_only`(只读)或 `allow_all`(允许所有写操作)。
|
42
|
+
- `tables`:表级权限配置,可以为每个表指定允许的操作类型。
|
43
|
+
|
44
|
+
## 使用写操作工具
|
45
|
+
|
46
|
+
MCP-DBUtils 提供了 `dbutils-execute-write` 工具用于执行写操作:
|
47
|
+
|
48
|
+
```json
|
49
|
+
{
|
50
|
+
"name": "dbutils-execute-write",
|
51
|
+
"arguments": {
|
52
|
+
"connection": "example_db",
|
53
|
+
"sql": "INSERT INTO logs (event, timestamp) VALUES ('event1', CURRENT_TIMESTAMP)",
|
54
|
+
"confirmation": "CONFIRM_WRITE"
|
55
|
+
}
|
56
|
+
}
|
57
|
+
```
|
58
|
+
|
59
|
+
### 参数说明
|
60
|
+
|
61
|
+
- `connection`:数据库连接名称。
|
62
|
+
- `sql`:SQL写操作语句(INSERT、UPDATE、DELETE)。
|
63
|
+
- `confirmation`:确认字符串,必须为 `CONFIRM_WRITE`。
|
64
|
+
|
65
|
+
## 审计日志
|
66
|
+
|
67
|
+
所有写操作都会记录详细的审计日志,可以通过 `dbutils-get-audit-logs` 工具查询:
|
68
|
+
|
69
|
+
```json
|
70
|
+
{
|
71
|
+
"name": "dbutils-get-audit-logs",
|
72
|
+
"arguments": {
|
73
|
+
"connection": "example_db",
|
74
|
+
"table": "logs",
|
75
|
+
"operation_type": "INSERT",
|
76
|
+
"status": "SUCCESS",
|
77
|
+
"limit": 100
|
78
|
+
}
|
79
|
+
}
|
80
|
+
```
|
81
|
+
|
82
|
+
### 参数说明
|
83
|
+
|
84
|
+
- `connection`:(可选)按数据库连接名称过滤。
|
85
|
+
- `table`:(可选)按表名过滤。
|
86
|
+
- `operation_type`:(可选)按操作类型过滤(INSERT、UPDATE、DELETE)。
|
87
|
+
- `status`:(可选)按操作状态过滤(SUCCESS、FAILED)。
|
88
|
+
- `limit`:(可选)返回记录数量限制,默认为 100。
|
89
|
+
|
90
|
+
### 审计日志配置
|
91
|
+
|
92
|
+
可以在配置文件中自定义审计日志行为:
|
93
|
+
|
94
|
+
```yaml
|
95
|
+
audit:
|
96
|
+
enabled: true
|
97
|
+
file_storage:
|
98
|
+
enabled: true
|
99
|
+
path: "logs/audit"
|
100
|
+
max_file_size: 10485760 # 10MB
|
101
|
+
backup_count: 10
|
102
|
+
memory_buffer:
|
103
|
+
size: 1000 # 内存中保存的最近日志记录数量
|
104
|
+
content:
|
105
|
+
sanitize_sql: true # 是否对SQL语句进行脱敏处理
|
106
|
+
include_user_context: true # 是否包含用户上下文信息
|
107
|
+
```
|
108
|
+
|
109
|
+
## 安全最佳实践
|
110
|
+
|
111
|
+
1. **最小权限原则**:只为必要的表和操作启用写权限。
|
112
|
+
2. **定期审计**:定期检查审计日志,监控数据库写操作。
|
113
|
+
3. **使用事务**:对于多步骤操作,使用事务确保数据一致性。
|
114
|
+
4. **参数化查询**:使用参数化查询防止SQL注入攻击。
|
115
|
+
5. **备份数据**:在执行重要写操作前备份数据。
|
116
|
+
|
117
|
+
## 注意事项
|
118
|
+
|
119
|
+
- 写操作功能是一项高风险功能,请谨慎使用。
|
120
|
+
- 所有写操作都会记录审计日志,包括操作类型、影响的表、SQL语句、执行结果等。
|
121
|
+
- 执行写操作时需要显式确认,防止意外修改数据。
|
122
|
+
- 默认情况下,所有数据库连接都是只读的,必须显式配置才能启用写操作。
|
@@ -0,0 +1,226 @@
|
|
1
|
+
# 数据库写操作配置指南
|
2
|
+
|
3
|
+
本文档详细介绍如何配置MCP数据库工具的写操作功能。默认情况下,所有数据库连接都是只读的,需要通过明确的配置才能启用写操作。
|
4
|
+
|
5
|
+
> ⚠️ **安全警告**:启用数据库写操作可能导致数据丢失或损坏。请确保您了解相关风险,并采取适当的安全措施。建议在生产环境中保持只读模式,或使用严格的权限控制。
|
6
|
+
|
7
|
+
## 1. 基本配置
|
8
|
+
|
9
|
+
要启用数据库写操作,需要在连接配置中添加`writable: true`参数:
|
10
|
+
|
11
|
+
```yaml
|
12
|
+
connections:
|
13
|
+
example_db:
|
14
|
+
type: postgres
|
15
|
+
host: localhost
|
16
|
+
port: 5432
|
17
|
+
database: mydb
|
18
|
+
user: postgres
|
19
|
+
password: secret
|
20
|
+
writable: true # 启用写操作
|
21
|
+
```
|
22
|
+
|
23
|
+
如果未指定`writable`参数,或设置为`false`,则连接将保持只读模式:
|
24
|
+
|
25
|
+
```yaml
|
26
|
+
connections:
|
27
|
+
readonly_db:
|
28
|
+
type: mysql
|
29
|
+
host: localhost
|
30
|
+
port: 3306
|
31
|
+
database: mydb
|
32
|
+
user: root
|
33
|
+
password: secret
|
34
|
+
# 未指定writable,默认为false(只读)
|
35
|
+
```
|
36
|
+
|
37
|
+
## 2. 细粒度权限控制
|
38
|
+
|
39
|
+
对于启用了写操作的连接,您可以进一步控制哪些表允许哪些写操作。
|
40
|
+
|
41
|
+
### 2.1 表级权限
|
42
|
+
|
43
|
+
通过`write_permissions.tables`配置特定表的写权限:
|
44
|
+
|
45
|
+
```yaml
|
46
|
+
connections:
|
47
|
+
example_db:
|
48
|
+
# 基本连接信息...
|
49
|
+
writable: true
|
50
|
+
write_permissions:
|
51
|
+
tables:
|
52
|
+
users: # 允许对users表进行写操作
|
53
|
+
operations: [INSERT, UPDATE]
|
54
|
+
logs: # 允许对logs表进行写操作
|
55
|
+
operations: [INSERT]
|
56
|
+
```
|
57
|
+
|
58
|
+
在上面的例子中:
|
59
|
+
- `users`表允许INSERT和UPDATE操作,但不允许DELETE
|
60
|
+
- `logs`表只允许INSERT操作
|
61
|
+
- 未明确指定的表将遵循默认策略
|
62
|
+
|
63
|
+
### 2.2 默认策略
|
64
|
+
|
65
|
+
通过`default_policy`设置未明确指定的表的默认权限策略:
|
66
|
+
|
67
|
+
```yaml
|
68
|
+
write_permissions:
|
69
|
+
default_policy: read_only # 未指定的表默认只读
|
70
|
+
```
|
71
|
+
|
72
|
+
可选的默认策略值:
|
73
|
+
- `read_only`:未明确指定的表默认只读(推荐)
|
74
|
+
- `allow_all`:未明确指定的表默认允许所有写操作
|
75
|
+
|
76
|
+
如果未设置`default_policy`,则默认为`read_only`。
|
77
|
+
|
78
|
+
### 2.3 操作级权限
|
79
|
+
|
80
|
+
对于每个允许写操作的表,可以指定允许的操作类型:
|
81
|
+
|
82
|
+
```yaml
|
83
|
+
tables:
|
84
|
+
users:
|
85
|
+
operations: [INSERT, UPDATE] # 只允许插入和更新,不允许删除
|
86
|
+
```
|
87
|
+
|
88
|
+
可用的操作类型:
|
89
|
+
- `INSERT`:允许插入新数据
|
90
|
+
- `UPDATE`:允许更新现有数据
|
91
|
+
- `DELETE`:允许删除数据
|
92
|
+
|
93
|
+
如果未指定`operations`,则默认允许所有写操作(INSERT、UPDATE、DELETE)。
|
94
|
+
|
95
|
+
## 3. 完整配置示例
|
96
|
+
|
97
|
+
以下是一个包含多种配置场景的完整示例:
|
98
|
+
|
99
|
+
```yaml
|
100
|
+
connections:
|
101
|
+
# 示例1:只读连接(默认)
|
102
|
+
readonly_sqlite:
|
103
|
+
type: sqlite
|
104
|
+
database: ":memory:"
|
105
|
+
# 未指定writable,默认为false(只读)
|
106
|
+
|
107
|
+
# 示例2:可写连接,无细粒度控制
|
108
|
+
simple_writable_mysql:
|
109
|
+
type: mysql
|
110
|
+
host: localhost
|
111
|
+
port: 3306
|
112
|
+
database: simple_db
|
113
|
+
user: root
|
114
|
+
password: secret
|
115
|
+
writable: true
|
116
|
+
# 未指定write_permissions,所有表都可写
|
117
|
+
|
118
|
+
# 示例3:可写连接,有表级和操作级控制
|
119
|
+
controlled_postgres:
|
120
|
+
type: postgres
|
121
|
+
host: localhost
|
122
|
+
port: 5432
|
123
|
+
database: controlled_db
|
124
|
+
user: postgres
|
125
|
+
password: postgres
|
126
|
+
writable: true
|
127
|
+
|
128
|
+
write_permissions:
|
129
|
+
# 表级权限
|
130
|
+
tables:
|
131
|
+
users:
|
132
|
+
operations: [INSERT, UPDATE] # 只允许插入和更新
|
133
|
+
logs:
|
134
|
+
operations: [INSERT] # 只允许插入
|
135
|
+
temp_data:
|
136
|
+
operations: [INSERT, UPDATE, DELETE] # 允许所有写操作
|
137
|
+
|
138
|
+
# 默认策略
|
139
|
+
default_policy: read_only # 未指定的表默认只读
|
140
|
+
|
141
|
+
# 示例4:可写连接,只有默认策略
|
142
|
+
all_writable_postgres:
|
143
|
+
type: postgres
|
144
|
+
host: localhost
|
145
|
+
port: 5432
|
146
|
+
database: all_writable_db
|
147
|
+
user: postgres
|
148
|
+
password: postgres
|
149
|
+
writable: true
|
150
|
+
|
151
|
+
write_permissions:
|
152
|
+
default_policy: allow_all # 所有表默认可写
|
153
|
+
```
|
154
|
+
|
155
|
+
## 4. 最佳实践
|
156
|
+
|
157
|
+
### 4.1 安全建议
|
158
|
+
|
159
|
+
1. **默认只读**:
|
160
|
+
- 除非明确需要写操作,否则保持默认的只读模式
|
161
|
+
- 生产环境建议使用只读连接
|
162
|
+
|
163
|
+
2. **最小权限原则**:
|
164
|
+
- 只为必要的表启用写操作
|
165
|
+
- 只允许必要的操作类型(如只允许INSERT而不允许DELETE)
|
166
|
+
|
167
|
+
3. **数据库用户权限**:
|
168
|
+
- 使用权限有限的数据库用户
|
169
|
+
- 不要使用数据库管理员账户
|
170
|
+
|
171
|
+
4. **审计日志**:
|
172
|
+
- 定期检查审计日志,监控写操作
|
173
|
+
- 设置异常操作警报
|
174
|
+
|
175
|
+
### 4.2 配置建议
|
176
|
+
|
177
|
+
1. **明确配置**:
|
178
|
+
- 总是明确设置`writable`参数,即使使用默认值
|
179
|
+
- 明确设置`default_policy`,避免依赖默认行为
|
180
|
+
|
181
|
+
2. **分离环境**:
|
182
|
+
- 为开发、测试和生产环境使用不同的配置文件
|
183
|
+
- 生产环境配置应该更加严格
|
184
|
+
|
185
|
+
3. **注释配置**:
|
186
|
+
- 为每个启用写操作的连接添加注释,说明原因
|
187
|
+
- 记录配置更改的时间和负责人
|
188
|
+
|
189
|
+
## 5. 故障排查
|
190
|
+
|
191
|
+
### 5.1 常见问题
|
192
|
+
|
193
|
+
1. **写操作被拒绝**:
|
194
|
+
- 检查连接是否设置了`writable: true`
|
195
|
+
- 检查表是否在允许的表列表中
|
196
|
+
- 检查操作类型是否被允许
|
197
|
+
|
198
|
+
2. **权限错误**:
|
199
|
+
- 检查数据库用户是否有足够的权限
|
200
|
+
- 检查数据库服务器的权限设置
|
201
|
+
|
202
|
+
3. **审计日志问题**:
|
203
|
+
- 检查日志目录的写入权限
|
204
|
+
- 检查磁盘空间是否充足
|
205
|
+
|
206
|
+
### 5.2 错误消息解释
|
207
|
+
|
208
|
+
| 错误消息 | 可能的原因 | 解决方案 |
|
209
|
+
|---------|-----------|---------|
|
210
|
+
| "Connection is not configured for write operations" | 连接未设置`writable: true` | 在配置文件中添加`writable: true` |
|
211
|
+
| "No permission to perform [操作] on table [表名]" | 表未被允许执行该操作 | 在`write_permissions.tables`中添加表和操作 |
|
212
|
+
| "Operation not confirmed" | 未提供正确的确认参数 | 在工具调用中添加`confirmation: "CONFIRM_WRITE"` |
|
213
|
+
|
214
|
+
## 6. 配置迁移
|
215
|
+
|
216
|
+
如果您从早期版本升级,需要注意以下几点:
|
217
|
+
|
218
|
+
1. 默认情况下,所有连接保持只读模式,与早期版本行为一致
|
219
|
+
2. 要启用写操作,需要明确添加新的配置参数
|
220
|
+
3. 建议在升级后检查所有配置文件,确保安全设置符合预期
|
221
|
+
|
222
|
+
## 7. 相关资源
|
223
|
+
|
224
|
+
- [数据库写操作功能设计](./technical/write-operations-design.md)
|
225
|
+
- [安全架构](./technical/security.md)
|
226
|
+
- [审计日志指南](./technical/audit-logging.md)
|