Skip to main content
Glama

mcp-dbutils

MIT License
81
  • Linux
  • Apple
security.md23.3 kB
# Архитектура безопасности *[English](../../en/technical/security.md) | [中文](../../zh/technical/security.md) | [Français](../../fr/technical/security.md) | [Español](../../es/technical/security.md) | [العربية](../../ar/technical/security.md) | Русский* Этот документ детализирует архитектуру безопасности MCP Database Utilities, объясняя механизмы и принципы, обеспечивающие безопасный доступ к базам данных для ИИ-ассистентов. ## Модель коммуникации и архитектура безопасности MCP Database Utilities реализует безопасную модель коммуникации, разработанную для защиты ваших данных на каждом этапе. Следующая диаграмма иллюстрирует, как данные перемещаются между компонентами с сохранением безопасности: ```mermaid flowchart LR subgraph User["Среда пользователя"] Client["ИИ-клиент<br>(Claude/Cursor)"] ConfigFile["Конфигурационный файл<br>(YAML)"] end subgraph MCP["MCP Database Utilities"] 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 ``` ## Принципы безопасности MCP Database Utilities спроектирован с безопасностью в качестве высшего приоритета, следуя этим основным принципам: 1. **Многоуровневая защита**: Множественные слои безопасности для защиты данных 2. **Принцип наименьших привилегий**: Минимальный доступ, необходимый для функционирования 3. **Безопасность по дизайну**: Безопасность встроена с самого начала, а не добавлена позже 4. **Прозрачность**: Открытая и проверяемая архитектура 5. **Изоляция**: Строгое разделение сред и соединений ## Ключевые механизмы безопасности ### 1. Строго только чтение Все взаимодействия с базами данных строго ограничены операциями только для чтения: - **Полный синтаксический анализ**: Каждый SQL-запрос полностью анализируется, чтобы убедиться, что он только для чтения - **Блокировка операций модификации**: Все команды, модифицирующие данные (INSERT, UPDATE, DELETE и т.д.), автоматически блокируются - **Блокировка DDL-команд**: Команды, модифицирующие структуру базы данных (CREATE, ALTER, DROP и т.д.), блокируются - **Многоуровневая проверка**: Запросы проверяются через SQL-парсер и проверки, специфичные для каждого типа базы данных ```python # Пример валидации запроса (псевдокод) def validate_query(query): # Синтаксический анализ запроса parsed_query = sql_parser.parse(query) # Проверка типа запроса if not parsed_query.is_select(): raise SecurityException("Разрешены только SELECT-запросы") # Проверка опасных конструкций if parsed_query.has_dangerous_clauses(): raise SecurityException("Обнаружены неразрешенные конструкции") # Проверка, специфичная для базы данных db_adapter.validate_read_only(query) return parsed_query ``` ### 2. Отсутствие прямого доступа к базе данных Архитектура гарантирует, что ИИ никогда не имеет прямого доступа к базам данных: - **Слой абстракции**: Все запросы проходят через несколько слоев абстракции - **Валидация входных данных**: Все входные данные валидируются и очищаются - **Параметризованные запросы**: Систематическое использование параметризованных запросов для предотвращения SQL-инъекций - **Изоляция соединений**: Каждое соединение изолировано и управляется сервисом ### 3. Изолированные соединения Соединения с базами данных строго изолированы: - **Выделенный пул соединений**: Каждая конфигурация базы данных использует свой собственный пул соединений - **Транзакции только для чтения**: Все транзакции явно настроены в режиме только для чтения - **Автоматические таймауты**: Соединения имеют настраиваемые таймауты для предотвращения зависших соединений - **Правильное закрытие**: Соединения правильно закрываются после использования ```yaml # Пример конфигурации с параметрами безопасности connections: secure-postgres: type: postgres host: db.example.com port: 5432 dbname: analytics user: readonly_user password: "********" ssl: mode: verify-full cert: /path/to/cert.pem key: /path/to/key.pem root: /path/to/root.crt pool: max_size: 5 timeout: 30 ``` ### 4. Соединение по требованию Соединения с базами данных создаются только при необходимости: - **Ленивое соединение**: Соединения создаются только при фактическом выполнении запроса - **Быстрое отключение**: Соединения возвращаются в пул как можно скорее - **Ограничение соединений**: Максимальное количество одновременных соединений настраиваемо - **Мониторинг соединений**: Все соединения отслеживаются для обнаружения аномалий ### 5. Автоматические таймауты Таймауты применяются на нескольких уровнях для предотвращения злоупотреблений: - **Таймаут запроса**: Временное ограничение для выполнения запроса - **Таймаут соединения**: Временное ограничение для создания соединения - **Таймаут простоя**: Закрытие неактивных соединений после настраиваемого периода - **Глобальный таймаут**: Общее временное ограничение для сессии ### 6. Защита учетных данных Учетные данные баз данных защищены: - **Безопасное хранение**: Пароли никогда не хранятся в виде открытого текста в памяти - **Маскирование в логах**: Чувствительная информация маскируется во всех логах - **Поддержка менеджеров секретов**: Возможна интеграция с решениями типа HashiCorp Vault, AWS Secrets Manager и т.д. - **Ротация учетных данных**: Поддержка периодической ротации учетных данных ### 7. Безопасность соединений Соединения с базами данных защищены: - **Поддержка SSL/TLS**: Зашифрованные соединения для всех поддерживаемых баз данных - **Верификация сертификатов**: Опция для верификации сертификатов серверов баз данных - **Продвинутые SSL-конфигурации**: Опции для тонкой настройки параметров SSL/TLS - **Безопасные протоколы**: Использование современных и безопасных версий протоколов ```yaml # Пример SSL-конфигурации для PostgreSQL connections: postgres-ssl: type: postgres host: secure-db.example.com port: 5432 dbname: analytics user: readonly_user password: "********" ssl: mode: verify-full # Опции: disable, allow, prefer, require, verify-ca, verify-full cert: /path/to/client-cert.pem key: /path/to/client-key.pem root: /path/to/root.crt ``` ## Меры защиты приватности ### 1. Локальная обработка Все операции выполняются локально: - **Нет передачи данных**: Данные никогда не покидают локальную среду - **Нет загрузки схемы**: Схемы баз данных не отправляются внешним сервисам - **Нет телеметрии**: Никакие данные об использовании не собираются и не отправляются ### 2. Минимальное раскрытие данных Сервис спроектирован для минимизации раскрытия данных: - **Ограничение результатов**: Максимальное количество возвращаемых строк настраиваемо - **Автоматическая пагинация**: Большие наборы результатов автоматически разбиваются на страницы - **Фильтрация чувствительных столбцов**: Возможность настройки столбцов для исключения из результатов - **Маскирование данных**: Опция для автоматического маскирования чувствительных данных (PII и т.д.) ### 3. Защита учетных данных Учетные данные соединения защищены: - **Нет раскрытия учетных данных**: Учетные данные никогда не раскрываются ИИ - **Абстракция соединений**: ИИ использует логические имена соединений, а не фактические детали - **Проверка разрешений**: Проверка, что используемые учетные записи имеют минимальные разрешения ### 4. Маскирование чувствительных данных Чувствительные данные могут быть автоматически замаскированы: - **Обнаружение PII**: Опция для автоматического обнаружения и маскирования персональной информации - **Настраиваемые правила маскирования**: Возможность определения пользовательских правил маскирования - **Безопасное логирование**: Чувствительные данные маскируются во всех логах ## Лучшие практики безопасности ### Безопасная конфигурация Рекомендации для безопасной конфигурации: 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 Database Utilities предоставляет три настраиваемых параметра таймаута для обеспечения безопасности подключений к базе данных и эффективного использования ресурсов: **Таймаут запроса (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. **Включите логирование**: ```yaml logging: level: INFO # Опции: DEBUG, INFO, WARNING, ERROR file: /path/to/dbutils.log format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" ``` 2. **Мониторьте запросы**: ```yaml monitoring: log_queries: true log_slow_queries: true slow_query_threshold: 5 # секунды ``` 3. **Настройте оповещения**: ```yaml alerts: failed_connections: threshold: 5 period: 60 # секунды action: "email:admin@example.com" ``` ## Аудит безопасности MCP Database Utilities регулярно подвергается аудитам безопасности: 1. **Статический анализ кода**: Код анализируется на предмет потенциальных уязвимостей 2. **Тесты на проникновение**: Проводятся тесты на проникновение для выявления слабых мест 3. **Обзор кода**: Код проверяется экспертами по безопасности 4. **Анализ зависимостей**: Зависимости анализируются на предмет известных уязвимостей ## Управление уязвимостями Процесс управления уязвимостями: 1. **Отчетность**: Уязвимости могут быть сообщены через GitHub или электронную почту 2. **Оценка**: Каждая уязвимость оценивается для определения ее серьезности 3. **Исправление**: Уязвимости исправляются как можно скорее 4. **Коммуникация**: Пользователи информируются об уязвимостях и исправлениях ## Заключение Безопасность является ядром MCP Database Utilities. Архитектура спроектирована для обеспечения того, чтобы ИИ-ассистенты могли получать доступ к данным баз данных безопасным способом, не компрометируя конфиденциальность или целостность данных. Множественные слои защиты, строгий режим только для чтения и механизмы изоляции гарантируют, что данные защищены в любое время.

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