Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Linked servers cannot be used under impersonation without a mapping ...??? Почему? / 19 сообщений из 19, страница 1 из 1
11.02.2021, 16:40
    #40044511
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
Наткнулся на интересный момент.
Не могу запустить хранимую процедуру на удаленном сервере, при том, что являюсь членом роли 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
11.02.2021, 17:06
    #40044526
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
uaggster,

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

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

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

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

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


Нет, не помогло :-(
...
Рейтинг: 0 / 0
13.02.2021, 17:02
    #40045085
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
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
13.02.2021, 21:09
    #40045105
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
uaggster
komrad
uaggster,

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

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


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


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


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

SIMPLicity_
Вот так выглядит:
...
Рейтинг: 0 / 0
15.02.2021, 07:55
    #40045328
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
Ролг Хупин
авторОбнаружил, что не могу вызывать такую (и подобные процедуры), на прилинкованном сервере, типа:
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
15.02.2021, 08:12
    #40045331
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
uaggster
SIMPLicity_
Вот так выглядит:


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


Код: 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
15.02.2021, 10:05
    #40045357
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
uaggster
Сон Веры Павловны, нет, логин любой.

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

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

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

Не помогает.
Когда я логинюсь как transferter, и пытаюсь выполнить обёртку - получаю ту же ошибку.
Вне зависимости от того, как я переписываю процедуру обертку "With execute as 'transferter'" или без этой опции.
Разумеется, transferter имеет права на запуск и обертки, и отмапленный transferter - на целевом сервере.
Но если убрать вызов в процедуре на удаленном сервере вызов процедуры на прилинкованном сервере loopback - всё работает.
И под отмапленным логином, и под любым логином, имеющим права на обеих серверах.
...
Рейтинг: 0 / 0
16.02.2021, 11:42
    #40045682
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
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
16.02.2021, 16:06
    #40045841
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linked servers cannot be used under impersonation without a mapping ...??? Почему?
Сон Веры Павловны
Владислав Колосов
В качестве remote user надо попробовать указать sa с паролем, но это удар по безопасности ниже пояса.

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


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


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