Подключиться к связанному серверу через соединение SQL Server pyodbc? - PullRequest
0 голосов
/ 29 октября 2019

В настоящее время я могу подключиться к своему SQL-серверу и напрямую запросить любую базу данных.

Проблема заключается в том, что я хочу запросить связанный сервер. Я не могу напрямую ссылаться на имя связанного сервера в методе connect(), и мне нужно сначала подключиться к локальной базе данных, а затем запустить OPENQUERY() для связанного сервера.

Это выглядит как странная работа. Есть ли способ сделать запрос на связанный сервер напрямую (из моего исследования вы не можете подключиться напрямую к связанному серверу) или хотя бы подключиться к серверу без указания базы данных, где я могу затем запустить OPENQUERY() длячто-нибудь без необходимости сначала подключиться к базе данных?

Пример того, что я должен сделать в настоящее время:

import pyodbc

ex_value = "SELECT * FROM OPENQUERY(LinkedServerName,'SELECT * FROM LinkedServerName.SomeTable')"
# I have to connect to some local database on the server and cannot connect to linked server initially.
odbc_driver, server, db = '{ODBC Driver 17 for SQL Server}', 'MyServerName', 'LocalDatabase'

with pyodbc.connect(driver=odbc_driver, host=server, database=db, trusted_connection='yes') as conn:
    conn.autocommit = False
    cursor = conn.cursor()
    cursor.execute(ex_value)
    tables = cursor.fetchall()

    for row in tables:
        print('Row: {}'.format(row))

    cursor.close()

1 Ответ

1 голос
/ 30 октября 2019

Как уже упоминал Шон, связанный сервер - это просто ссылка на другой сервер, который хранится на локальном сервере.

Однако вам не нужно управлять 100+ учетными данными пользователя. Если у вас есть пользователи, использующие аутентификацию Windows, и Kerberos работает между серверами, связанный сервер может просто выдать себя за вас, когда он подключается к другому серверу через определение связанного сервера.

Тогда вы можете использовать либо 4имена частей, чтобы ссылаться на объекты на другом сервере, или использовать OPENQUERY, когда вам нужен больший контроль над тем, что выполняется где.

Наконец, если они оба являются SQL Server и оба используют одинаковое сопоставление, убедитесь, что выустановите параметр связанного сервера, чтобы сказать, что они сопоставимы. Это может существенно повлиять на производительность вашего связанного сервера. Я регулярно вижу системы, где это не установлено, и это должно быть.

...