Как выполнить удаленное подключение к SQL Server?

Здравствуйте! <br/> Я пытаюсь установить удаленное подключение к SQL-серверу на другой машине в закрытой локальной сети. <br/> Подключение локально проходит успешно, но возникает проблема с подключением через проект в DBeaver. <br/> Я использую следующий код на Python: <br/> ```python <br/> class SQLServer: <br/> <br/> name = 'sqlserver' <br/> <br/> types = dict( <br/> int=int, # Целое число <br/> bigint=int, # Большое целое число <br/> smallint=int, # Маленькое целое число <br/> tinyint=int, # Очень маленькое целое число <br/> decimal=float, # Число с фиксированной точностью <br/> numeric=float, # Число с фиксированной точностью <br/> float=float, # Число с плавающей точностью <br/> real=float, # Число с плавающей точностью (меньшей точности) <br/> char=str, # Фиксированная длина строки <br/> varchar=str, # Переменная длина строки <br/> text=str, # Текст <br/> ntext=str, # Юникод текст <br/> date=str, # Дата <br/> datetime=str, # Дата и время <br/> bit=bool, # Логическое значение <br/> ) <br/> <br/> def get_params(data): <br/> r = ['DRIVER={ODBC Driver 18 for SQL Server}'] <br/> r.append(f'Server={data["host"] if "host" in data else "localhost"}' + (f',{data["port"]}' if 'port' in data else '')) <br/> r.append(f'Database={data["database"] if "database" in data else "master"}') <br/> if 'user' in data: <br/> r.append(f'User Id={data["user"]}') <br/> if 'password' in data: <br/> r.append(f'Password={data["password"]}') <br/> r.append('Trusted_Connection=Yes;Encrypt=No') <br/> return ';'.join(r) <br/> <br/> def check(params): <br/> with pyodbc.connect(params) as conn: <br/> pass <br/> <br/> def get_columns(params, table): <br/> with pyodbc.connect(params) as conn: <br/> with conn.cursor() as cur: <br/> cur.execute('select column_name, data_type f...``` <br/> Не могли бы вы помочь разобраться с проблемой доступа к удаленному серверу через проект в DBeaver?
  • 10 февраля 2025 г. 11:24
Ответы на вопрос 2
Здравствуйте!

Для того чтобы выполнить удаленное подключение к SQL Server, вам нужно учесть несколько важных моментов:

1. **Проверка доступа**: Убедитесь, что SQL Server настроен на разрешение удаленных подключений. Для этого в SQL Server Management Studio (SSMS) необходимо открыть свойства вашего SQL Server (правый клик на сервере -> Свойства) и в разделе "Connections" убедиться, что установлена галочка "Allow remote connections to this server".

2. **Настройки брандмауэра**: Проверьте настройки брандмауэра на машине с SQL Server. Порт по умолчанию для SQL Server - 1433, поэтому убедитесь, что он открыт для входящих соединений. Вы можете добавить правило в брандмауэр Windows для разрешения трафика через этот порт.

3. **Настройка SQL Server Browser**: Если вы используете именованный экземпляр SQL Server, убедитесь, что служба SQL Server Browser запущена. Это позволяет клиентам находить экземпляры на сервере.

4. **Использование правильного драйвера ODBC**: В вашем коде указано `ODBC Driver 18 for SQL Server`, убедитесь, что этот драйвер установлен на вашей машине. Если вы не уверены, попробуйте также использовать `ODBC Driver 17 for SQL Server`. 

5. **Тестирование подключения из DBeaver**:
    - В DBeaver создайте новое соединение.
    - Введите адрес сервера (например, `192.168.1.100` или `имя_сервера\имя_экземпляра`).
    - Укажите порт (если он не стандартный, например, 1433).
    - Укажите имя базы данных, пользователя и пароль.
    - При установке соединения выберите драйвер `SQL Server`.

6. **Параметры подключения (SSL)**: Если ваш сервер требует защищенное соединение (SSL/TLS), проверьте, чтобы у вас было установлено соответствующее значение `Encrypt` (например, `Encrypt=True`).

### Формирование строки подключения в вашем коде:
Убедитесь, что параметры подключения формируете правильно. Вот пример оформления:
```python
r = ['DRIVER={ODBC Driver 18 for SQL Server}']
r.append(f'Server={data["host"]}' + (f',{data["port"]}' if 'port' in data else ''))
r.append(f'Database={data["database"]}')
if 'user' in data:
    r.append(f'User Id={data["user"]}')
if 'password' in data:
    r.append(f'Password={data["password"]}')
r.append('Encrypt=no')  # Измените на Encrypt=yes, если требуется
```

Если после проверки всех вышеперечисленных пунктов проблема все равно сохраняется, попробуйте:
- Проверить, нет ли блокировок на уровне сети (например, между вашим компьютером и сервером).
- Использовать утилиты, такие как `telnet` или `ping`, чтобы убедиться, что вы можете достучаться до сервера по указанному порту.

Если остались вопросы или возникли сложности, пожалуйста, дайте знать!
Проблема в строке подключения. Попробуй 192.168.0.233,33678 вместо 192.168.0.233\SQLEXPRESS. Плюс проверь, что порт верный и SQL Server слушает внешний трафик. Добавь Encrypt=no;TrustServerCertificate=yes. Если не работает, проверь firewall и разрешение удалeнных подключений в SQL Server
Похожие вопросы