#!/usr/bin/env python3 # /opt/trueconf_bot/test_secure_connect.py import sys import os import pymssql # Добавляем путь к проекту для корректных импортов конфигурации sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) try: print("🔄 Загружаем конфигурацию и выгружаем секреты из Passwork...") import config.config as config except ImportError as e: print(f"❌ Ошибка импорта config.py: {e}") sys.exit(1) def main(): # Технические параметры целевого сервера SERVER = '172.16.20.203' DATABASE = 'iskmdax_model' # Извлекаем данные из автоматически загруженного пула USER = getattr(config, 'DB_USER', None) PASSWORD = getattr(config, 'DB_PASSWORD', None) if not USER or not PASSWORD: print("❌ Ошибка: Учетные данные для подключения к БД не найдены в Passwork!") sys.exit(1) print(f"🔌 Устанавливаем ЗАЩИЩЕННОЕ соединение (encryption='require')...") print(f" Сервер: {SERVER}") print(f" База: {DATABASE}") print(f" Логин: [ДАННЫЕ СКРЫТЫ]") print("-" * 60) try: conn = pymssql.connect( server=SERVER, user=USER, password=PASSWORD, database=DATABASE, charset='cp1251', encryption='require' # Строгое требование SSL/TLS ) cursor = conn.cursor() print("✅ Защищенное TLS/SSL соединение с сервером успешно установлено!") # Проверочный SQL-запрос query = "SELECT TOP(5) * FROM dbo.Layer;" print(f"🏃 Выполняем тестовый запрос: {query}\n") cursor.execute(query) rows = cursor.fetchall() if rows: print(f"🎯 Успешно получено строк: {len(rows)}") for idx, row in enumerate(rows, 1): # Печатаем содержимое строки как есть print(f" 🔹 Строка #{idx}: {row}") else: print("📭 Запрос выполнен успешно, но целевая таблица оказалась пустой.") conn.close() print("\n🏁 Тест защищенного соединения завершен успешно!") except Exception as e: print(f"\n❌ Ошибка подключения или выполнения запроса!") error_msg = str(e) if "Login failed" in error_msg or "18456" in error_msg: print("Детали: Ошибка аутентификации (проверьте корректность учетных данных в Passwork).") else: print(f"Детали: {error_msg}") sys.exit(1) if __name__ == "__main__": main()