MSSQL Ошибка 7303: Cannot initialize data source object of OLE DB provider
- Запросы к связанному серверу (Linked Server) или интеграциям 1С/СУБД завершаются ошибкой:
Msg 7303, Level 16, State 1: Cannot initialize the data source object of OLE DB provider 'MSOLEDBSQL' for linked server 'SERVER_NAME'. - В журнале SQL Server ErrorLog фиксируются сбои аутентификации
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'(проблема Double-Hop). - Невозможно открыть свойства связанного сервера или просмотреть список удаленных таблиц в SSMS.
- Служба 1С:Предприятие аварийно прерывает выполнение регламентных заданий фонового обмена.
1. Проверка и настройка параметров безопасности Linked Server
Убедитесь, что для контекста безопасности провайдера настроено корректное сопоставление пользователей:
-- Проверка существующей конфигурации связанного сервера
EXEC sp_helpserver 'LINKED_SERVER_NAME';
EXEC sp_helplinkedsrvlogin 'LINKED_SERVER_NAME';
-- Принудительное сопоставление с явной SQL-аутентификацией
EXEC sp_droplinkedsrvlogin 'LINKED_SERVER_NAME', NULL;
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'LINKED_SERVER_NAME',
@useself = 'FALSE',
@locallogin = NULL,
@rmtuser = 'remote_sql_user',
@rmtpassword = 'StrongPassword123!';2. Настройка прав провайдера OLE DB (AllowInProcess)
Если используется провайдер MSOLEDBSQL или SQLNCLI11, проверьте флаги в реестре или через T-SQL:
EXEC master.sys.sp_MSset_oledb_prop N'MSOLEDBSQL', N'AllowInProcess', 1;
EXEC master.sys.sp_MSset_oledb_prop N'MSOLEDBSQL', N'DynamicParameters', 1;3. Устранение ошибки Kerberos Double-Hop
При использовании доменной Windows-аутентификации настройте SPN (Service Principal Name) для учетной записи службы SQL Server:
# Выполняется в cmd/powershell от имени Domain Admin
setspn -S MSSQLSvc/sql-node1.domain.local:1433 domain\sql_service_account
setspn -S MSSQLSvc/sql-node1 domain\sql_service_account
setspn -L domain\sql_service_account4. Проверка прав на временные каталоги учетной записи службы
Учетная запись, под которой работает служба SQL Server, должна обладать полными правами (Full Control) на каталоги:
C:\Users\<SQL_Service_Account>\AppData\Local\Temp
C:\Windows\ServiceProfiles\...\AppData\Local\Temp Частые вопросы (FAQ)
Почему возникает ошибка 7303 при использовании Windows Authentication?
В 90% случаев это проблема Kerberos Double-Hop: клиент подключается к серверу А, а сервер А пытается передать NTLM-токен серверу Б. NTLM не поддерживает повторное делегирование, поэтому удаленный сервер видит подключение как NT AUTHORITY\ANONYMOUS LOGON. Требуется настройка SPN и ограниченного делегирования Kerberos (Constrained Delegation) в Active Directory.
Что означает опция AllowInProcess для OLE DB провайдера?
Флаг AllowInProcess разрешает загрузку библиотеки провайдера прямо в адресное пространство процесса sqlservr.exe. Если он отключен, провайдер запускается во внешнем процессе dllhost.exe, что часто вызывает сбои DCOM-прав и падение по ошибке 7303.
Как проверить, какой SPN используется в текущей сессии?
Выполните запрос: SELECT auth_scheme, client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID; Если в поле auth_scheme указано NTLM вместо KERBEROS, делегирование на Linked Server работать не будет.
Поможет ли перевод сопоставления на постоянного SQL-пользователя?
Да, явное указание удаленной учетной записи через sp_addlinkedsrvlogin @useself='FALSE', @rmtuser='...', @rmtpassword='...' полностью обходит ограничения Kerberos Double-Hop и изолирует права.