Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
uaggster
Member

Откуда:
Сообщений: 950
Наткнулся на интересный момент.
Не могу запустить хранимую процедуру на удаленном сервере, при том, что являюсь членом роли sysadmin, делегирование служб (керберос) включено, домен один, вход под доменной авторизацией.
Получаю ошибку "Linked servers cannot be used under impersonation without a mapping for the impersonated login"
Внутри хранимой процедуры есть вызов хранимки с удаленного сервера, на самом деле loopback.
loopback реализован так:

-- Создание 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


Логирующая хранимка - вызывается так:
-- логгируем действия
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.

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


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

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

Разработчику, конечно, написал, чтобы убрал каку, но вопрос остался: ПОЧЕМУ???
11 фев 21, 16:40    [22279599]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
komrad
Member

Откуда:
Сообщений: 5495
uaggster,

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

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'loopback',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
11 фев 21, 17:06    [22279615]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34716
Блог
через табличные переменные и TRY-CATCH логируйте...
11 фев 21, 17:40    [22279625]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
uaggster
Member

Откуда:
Сообщений: 950
komrad, Попробую, завтра отпишусь.
11 фев 21, 19:31    [22279709]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
uaggster
Member

Откуда:
Сообщений: 950
Критик
через табличные переменные и TRY-CATCH логируйте...

"Мопед не мой, я только разместил объяву" (с)
Мне только пару дырочек провертеть в этом пандемониуме, не более того.
11 фев 21, 19:38    [22279716]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
uaggster
Member

Откуда:
Сообщений: 950
komrad
uaggster,

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

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'loopback',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

Нет, не помогло :-(
13 фев 21, 16:50    [22280496]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8313
uaggster,

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

можно затолкать в сообщение varbinary(8000).
13 фев 21, 17:02    [22280500]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8818
uaggster
komrad
uaggster,

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

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'loopback',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

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


Странно. А что видно если вот так посмотреть?

К сообщению приложен файл. Размер - 106Kb
13 фев 21, 21:09    [22280585]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
Ролг Хупин
Member

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


А если пока вызвать простейшую процедуру типа принт хеллоу ворлд, что будет?
13 фев 21, 22:36    [22280630]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
uaggster
Member

Откуда:
Сообщений: 950
Владислав Колосов, спасибо, я этот метод знаю, но, в данном случае, этот вопрос - не контролирую :-(

SIMPLicity_
Вот так выглядит:

К сообщению приложен файл. Размер - 72Kb
15 фев 21, 07:43    [22280917]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
uaggster
Member

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


А если пока вызвать простейшую процедуру типа принт хеллоу ворлд, что будет?

Процедуры, даже не простейшие, в которых нет вызова процедур с удаленного сервера loopback - вызываются без всяких проблем.
Та же самая процедура, которую я хочу вызвать, если в ней заменить вызов через удаленный сервер на локальный вызов - без проблем отрабатывает.
И сама процедура, которая вызывается через удаленный сервер - тоже сродни хеллоу уорлд:
--  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


Разработчиком я уже написал, чтобы логировали по человечески, через переменные, например, но это дело - не быстрое, и я боюсь, что услышан - не буду.
15 фев 21, 07:55    [22280919]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6116
uaggster
SIMPLicity_
Вот так выглядит:

Картинка с другого сайта.

А теукщий логин, под которым делает попытка обращения - этот самый transferer?
15 фев 21, 08:12    [22280922]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
uaggster
Member

Откуда:
Сообщений: 950
Сон Веры Павловны, нет, логин любой.
С "моей" стороны я пытаюсь написать что-то типа:


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).
15 фев 21, 08:36    [22280924]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6116
uaggster
Сон Веры Павловны, нет, логин любой.

Это окошко настройки линкед-сервера показывает соответствие локальных логинов, под которыми делается попытка обращения, и удаленных логинов, под которыми на линкед-сервере делается вся работа. Е исли соответствия локальному логину из списка нет, то действуют приведенныt ниже опции, в данном случае - будет использоваться security context текущего логина, и именно с ним проблема. Сделайте так, как приведено на скриншоте SIMPLicity_ - установите самую последнюю опцию, Be made using this security context, вбейте в поля логин/пароль этого transferter.
15 фев 21, 10:05    [22280967]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8313
В качестве remote user надо попробовать указать sa с паролем, но это удар по безопасности ниже пояса.
15 фев 21, 11:44    [22281001]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6116
Владислав Колосов
В качестве remote user надо попробовать указать sa с паролем, но это удар по безопасности ниже пояса.

Да зачем sa - любого, у которого есть права на выполнение того, что требуется. Ну, или, в конце концов, обращаться к линкед-серверу только под теми логинами, которые в списке маппинга.
15 фев 21, 11:57    [22281011]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
uaggster
Member

Откуда:
Сообщений: 950
Сон Веры Павловны
Владислав Колосов
В качестве remote user надо попробовать указать sa с паролем, но это удар по безопасности ниже пояса.

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

Не помогает.
Когда я логинюсь как transferter, и пытаюсь выполнить обёртку - получаю ту же ошибку.
Вне зависимости от того, как я переписываю процедуру обертку "With execute as 'transferter'" или без этой опции.
Разумеется, transferter имеет права на запуск и обертки, и отмапленный transferter - на целевом сервере.
Но если убрать вызов в процедуре на удаленном сервере вызов процедуры на прилинкованном сервере loopback - всё работает.
И под отмапленным логином, и под любым логином, имеющим права на обеих серверах.
16 фев 21, 10:47    [22281453]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
uaggster,

А попробуйте вот так
-- логгируем действия
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
16 фев 21, 11:42    [22281485]     Ответить | Цитировать Сообщить модератору
 Re: Linked servers cannot be used under impersonation without a mapping ...??? Почему?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8313
Сон Веры Павловны
Владислав Колосов
В качестве remote user надо попробовать указать sa с паролем, но это удар по безопасности ниже пояса.

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


Чтобы не было олицетворения, у автора execute as login = 'sa' в процедуре.
16 фев 21, 16:06    [22281692]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить