powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Linked servers cannot be used under impersonation without a mapping ...??? Почему?
19 сообщений из 19, страница 1 из 1
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40044511
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наткнулся на интересный момент.
Не могу запустить хранимую процедуру на удаленном сервере, при том, что являюсь членом роли sysadmin, делегирование служб (керберос) включено, домен один, вход под доменной авторизацией.
Получаю ошибку "Linked servers cannot be used under impersonation without a mapping for the impersonated login"
Внутри хранимой процедуры есть вызов хранимки с удаленного сервера, на самом деле loopback.
loopback реализован так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
-- Создание loopback для логгинга в отдельной транзакции
IF EXISTS(SELECT * FROM sys.servers WHERE name = N'loopback') EXEC master.sys.sp_dropserver 'loopback','droplogins'
go
DECLARE @database VARCHAR(200) = DB_NAME();
EXEC master.dbo.sp_addlinkedserver @server = N'loopback', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=@@SERVERNAME, @catalog = @database
go
EXEC master.dbo.sp_serveroption loopback, 'RPC', 'TRUE'
go
EXEC master.dbo.sp_serveroption loopback, 'RPC OUT', 'TRUE'
go
EXEC master.dbo.sp_serveroption loopback, 'remote proc transaction promotion', 'FALSE'
go



Логирующая хранимка - вызывается так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
-- логгируем действия
Declare @procedure sysname;
Set @procedure = Quotename(OBJECT_SCHEMA_NAME(@@PROCID)) + N'.' + Quotename(OBJECT_NAME(@@PROCID));
Declare @guid uniqueidentifier = NEWID();

EXEC loopback.[db1].[load].[ToLOG] @filial_id=@filial_id
		,@guid     =@guid
		,@procedure=@procedure
		,@action   =0


Внутри ToLog - никаких изысков, просто insert into в таблицу с логами, переданных параметров.

Процедура, внутри которой происходит такой вызов через loopback, объявлена With execute as owner, owner - sa.

Обнаружил, что не могу вызывать такую (и подобные процедуры), на прилинкованном сервере, типа:
Код: sql
1.
exec [SRV-REMOTE].[db1].[load].[Эта самая говенная процедура с loopback внутри] @filial_id=@filial_id



Получаю сабжевую ошибку.
Заменяю loopback вызов - прямым, всё ОК.

Протрахался целый день, последовательно выясняя, всё ли с видимостью, делегированием, разрешениями на сервисные логины, с паролями на сервисные логины, пока не обнаружил, что процедуры, без loopback вызова - замечательно запускаются.

Разработчику, конечно, написал, чтобы убрал каку, но вопрос остался: ПОЧЕМУ???
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40044526
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

а если такое добавить?

Код: sql
1.
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'loopback',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40044535
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
через табличные переменные и TRY-CATCH логируйте...
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40044601
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad, Попробую, завтра отпишусь.
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40044608
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Критик
через табличные переменные и TRY-CATCH логируйте...

"Мопед не мой, я только разместил объяву" (с)
Мне только пару дырочек провертеть в этом пандемониуме, не более того.
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045083
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad
uaggster,

а если такое добавить?

Код: sql
1.
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'loopback',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL


Нет, не помогло :-(
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045085
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

используйте для журналирования event notification.
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/create-event-notification-transact-sql?view=sql-server-2017

можно затолкать в сообщение varbinary(8000).
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045105
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
komrad
uaggster,

а если такое добавить?

Код: sql
1.
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'loopback',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL


Нет, не помогло :-(


Странно. А что видно если вот так посмотреть?
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045130
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОбнаружил, что не могу вызывать такую (и подобные процедуры), на прилинкованном сервере, типа:
exec [SRV-REMOTE].[db1].[load].[Эта самая говенная процедура с loopback внутри] @filial_id=@filial_id


А если пока вызвать простейшую процедуру типа принт хеллоу ворлд, что будет?
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045326
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов , спасибо, я этот метод знаю, но, в данном случае, этот вопрос - не контролирую :-(

SIMPLicity_
Вот так выглядит:
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045328
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин
авторОбнаружил, что не могу вызывать такую (и подобные процедуры), на прилинкованном сервере, типа:
exec [SRV-REMOTE].[db1].[load].[Эта самая говенная процедура с loopback внутри] @filial_id=@filial_id


А если пока вызвать простейшую процедуру типа принт хеллоу ворлд, что будет?
Процедуры, даже не простейшие, в которых нет вызова процедур с удаленного сервера loopback - вызываются без всяких проблем.
Та же самая процедура, которую я хочу вызвать, если в ней заменить вызов через удаленный сервер на локальный вызов - без проблем отрабатывает.
И сама процедура, которая вызывается через удаленный сервер - тоже сродни хеллоу уорлд:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
--  0 - Процедура начата
--  1 - процедура успешно завершена
-- -1 - процедура завершена с ошибкой

CREATE PROC [load].[ToLOG] 
    @filial_id smallint,
    @guid uniqueidentifier,
    @procedure sysname,
    @action smallint,
    @message nvarchar(max) = NULL
As
BEGIN
    Set NOCOUNT ON;
    
    insert into [load].[log] ([guid], [date], filial_id, [procedure], [action], [message])
				  Values (@guid, GETDATE(), @filial_id, @procedure, @action, Try_convert(xml, @message))

END
GO



Разработчиком я уже написал, чтобы логировали по человечески, через переменные, например, но это дело - не быстрое, и я боюсь, что услышан - не буду.
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045331
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
SIMPLicity_
Вот так выглядит:


А теукщий логин, под которым делает попытка обращения - этот самый transferer?
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045333
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны, нет, логин любой.
С "моей" стороны я пытаюсь написать что-то типа:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE PROCEDURE [load].[enqueue]
	@filial_id int = Null
	With execute as 'transferter'
AS
BEGIN
	SET NOCOUNT ON;
	exec [SRV002]..[load].[enqueue] @filial_id = @filial_id
END
GO


Впрочем, оно не работает и если With execute as 'transferter' убрать, и пытаться вызвать эту хранимку под доменной учеткой, сисадмином на обоих серверах.
И если убрать, но пытаться выполнится под transferter.
И вообще, как угодно, если внутри удаленной процедуры [SRV002]..[load].[enqueue] есть вызов другой удаленной хранимой процедуры.
transferter имеет права на запуск [load].[enqueue] на SRV002, и всё замечательно работает, если убрать внутри нее удаленный вызов (на loopback).
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045357
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Сон Веры Павловны, нет, логин любой.

Это окошко настройки линкед-сервера показывает соответствие локальных логинов, под которыми делается попытка обращения, и удаленных логинов, под которыми на линкед-сервере делается вся работа. Е исли соответствия локальному логину из списка нет, то действуют приведенныt ниже опции, в данном случае - будет использоваться security context текущего логина, и именно с ним проблема. Сделайте так, как приведено на скриншоте SIMPLicity_ - установите самую последнюю опцию, Be made using this security context, вбейте в поля логин/пароль этого transferter.
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045386
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В качестве remote user надо попробовать указать sa с паролем, но это удар по безопасности ниже пояса.
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045393
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
В качестве remote user надо попробовать указать sa с паролем, но это удар по безопасности ниже пояса.

Да зачем sa - любого, у которого есть права на выполнение того, что требуется. Ну, или, в конце концов, обращаться к линкед-серверу только под теми логинами, которые в списке маппинга.
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045661
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны
Владислав Колосов
В качестве remote user надо попробовать указать sa с паролем, но это удар по безопасности ниже пояса.

Да зачем sa - любого, у которого есть права на выполнение того, что требуется. Ну, или, в конце концов, обращаться к линкед-серверу только под теми логинами, которые в списке маппинга.

Не помогает.
Когда я логинюсь как transferter, и пытаюсь выполнить обёртку - получаю ту же ошибку.
Вне зависимости от того, как я переписываю процедуру обертку "With execute as 'transferter'" или без этой опции.
Разумеется, transferter имеет права на запуск и обертки, и отмапленный transferter - на целевом сервере.
Но если убрать вызов в процедуре на удаленном сервере вызов процедуры на прилинкованном сервере loopback - всё работает.
И под отмапленным логином, и под любым логином, имеющим права на обеих серверах.
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045682
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

А попробуйте вот так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
-- логгируем действия
Declare @procedure sysname;
Set @procedure = Quotename(OBJECT_SCHEMA_NAME(@@PROCID)) + N'.' + Quotename(OBJECT_NAME(@@PROCID));
Declare @guid uniqueidentifier = NEWID();

declare @load_proc sysname = quotename(@@servername) + N'.[db1].[load].[ToLOG]';
EXEC @load_proc @filial_id=@filial_id
		,@guid     =@guid
		,@procedure=@procedure
		,@action   =0
...
Рейтинг: 0 / 0
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
    #40045841
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
Владислав Колосов
В качестве remote user надо попробовать указать sa с паролем, но это удар по безопасности ниже пояса.

Да зачем sa - любого, у которого есть права на выполнение того, что требуется. Ну, или, в конце концов, обращаться к линкед-серверу только под теми логинами, которые в списке маппинга.


Чтобы не было олицетворения, у автора execute as login = 'sa' в процедуре.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Linked servers cannot be used under impersonation without a mapping ...??? Почему?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]