Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Service broker procedure. Access to the remote server is denied / 12 сообщений из 12, страница 1 из 1
16.07.2019, 17:16
    #39837979
IlyamI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Service broker procedure. Access to the remote server is denied
Всем доброго дня.

Пытаюсь заставить работать процедуру с линкованным сервером.

Имеется: полностью настроенный service broker под конкретную задачу (тип сообщения, очередь, сервис, контракт и т.д.) Создана и вызывается при получении сообщения процедура.

Одна беда - вызываемая процедура (пр.1) в зависимости от сообщения вызывает другую процедуру (пр.2). В пр.2 имеется запрос на другой сервер через линк. Пр.2 даже не начинает выполняться. В момент ее вызова падает с ошибкой "Access to the remote server is denied because the current security context is not trusted".

Небольшое расследование показало, что пр.1 вызывается в следующем контексте безопасности, соответственно, контекст выполнения пр.2 тот же:
Код: sql
1.
select CURRENT_USER, SESSION_USER, SUSER_NAME(), SUSER_SNAME(), SYSTEM_USER, USER, USER_ID(), USER_NAME()


dbo dbo sa sa sa dbo 1 dbo

Линк создан с параметром "Be made using this security context":
Код: sql
1.
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'сервер name',@useself=N'False',@locallogin=NULL,@rmtuser=N'remote user',@rmtpassword='user password'



Подскажите, почему не работает линк?
...
Рейтинг: 0 / 0
16.07.2019, 17:34
    #39837990
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Service broker procedure. Access to the remote server is denied
Придется включить у БД trustworthy.
...
Рейтинг: 0 / 0
16.07.2019, 17:47
    #39838000
IlyamI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Service broker procedure. Access to the remote server is denied
invm,

проставил у обеих БД это свойство в ТРУ, не помогло
...
Рейтинг: 0 / 0
16.07.2019, 17:58
    #39838011
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Service broker procedure. Access to the remote server is denied
IlyamI,

у вас процедура 1 это процедура активации очереди?
...
Рейтинг: 0 / 0
16.07.2019, 18:06
    #39838020
IlyamI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Service broker procedure. Access to the remote server is denied
felix_ff,

Да, это процедура, которая вызывается при появлении сообщения в очереди.
...
Рейтинг: 0 / 0
16.07.2019, 18:20
    #39838027
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Service broker procedure. Access to the remote server is denied
IlyamI,

судя по сообщения, связанный сервер должен быть подключен через доверительное соединение, т.е. Win авторизация.
...
Рейтинг: 0 / 0
16.07.2019, 18:27
    #39838030
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Service broker procedure. Access to the remote server is denied
IlyamIпроставил у обеих БД это свойство в ТРУ, не помоглоНе надо у обоих. Надо у вызывающей.
Владелец БД кто?
...
Рейтинг: 0 / 0
16.07.2019, 18:36
    #39838033
IlyamI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Service broker procedure. Access to the remote server is denied
invm,

Владелец базы - SA

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  alter proc test_link
  with execute as 'dbo'
  as

  begin
  select * from [remote server].[remote db].[dbo].[LOGS]
	
  end

  exec test_link


вызов процедуры заканчивается ошибкой.

Если закомментировать "with execute as 'dbo'", то из-под моей учетки работает.
...
Рейтинг: 0 / 0
16.07.2019, 19:26
    #39838045
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Service broker procedure. Access to the remote server is denied
IlyamI,

Вам предстоит изрядный гемморой.
Процедуры активации работают в контексте execute as user выражения, в связи с этим моментом вы заперты в песочнице, а поскольку к линкованным серверам доступ имеют логины а не пользователи, вам необходимо олицетворение контекста логина который будет сопоставляться с удаленным логином (аля прокси)

в ближайшем рассмотрении это должно выглядеть как то так:
Код: sql
1.
2.
3.
4.
create login proxy_for_remotesrv with password = 'strong_password';
deny connect to proxy_for_remotesrv;
go
sp_addlinkedsrvlogin N'remote server', N'false', N'proxy_for_remotesrv', N'remote_login', N'remote_login_password';



после чего в процедуре активации вам необходимо будет применить олицетворение логина
Код: sql
1.
2.
3.
execute as login = 'proxy_for_remotesrv';
select * from [remote server].[db].[dbo].[table];
revert;



trustworthy можно не включать если озаботитесь безопасностью и подпишите процедуру сертификатом с нужными правами
...
Рейтинг: 0 / 0
16.07.2019, 19:35
    #39838048
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Service broker procedure. Access to the remote server is denied
IlyamI,

Вы делаете что-то не то или не там.
Изучайте
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
use master;
create login TestLogin with password = '', check_policy = off;
exec sys.sp_addlinkedserver @server = N'loopback', @srvproduct = N'', @provider = N'SQLNCLI', @datasrc = @@servername;
exec sys.sp_serveroption @server = N'loopback', @optname = N'data access', @optvalue = N'true';
exec sys.sp_addlinkedsrvlogin @rmtsrvname = N'loopback', @useself = N'false', @locallogin = null, @rmtuser = N'TestLogin', @rmtpassword = N'';
go

create database Test001;
alter authorization on database::Test001 to sa;
go

use Test001;
go

create procedure dbo.spTest
as
begin
 select top (1) system_user, * from loopback.master.dbo.spt_values;
end;
go

exec dbo.spTest;
go

alter procedure dbo.spTest
with execute as 'dbo'
as
begin
 select top (1) system_user, * from loopback.master.dbo.spt_values;
end;
go

exec dbo.spTest;
go

alter database Test001 set trustworthy on;
go

exec dbo.spTest;
go

use master;
exec sys.sp_dropserver @server = N'loopback', @droplogins = N'droplogins';
drop login TestLogin;
go

drop database Test001;
go

...
Рейтинг: 0 / 0
16.07.2019, 19:36
    #39838049
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Service broker procedure. Access to the remote server is denied
ой не про trustworthy я глупость сморозил мы ж из базы вылазим за логинами.
...
Рейтинг: 0 / 0
17.07.2019, 14:02
    #39838305
IlyamI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Service broker procedure. Access to the remote server is denied
Всем спасибо за помощь.

Сегодня все заработало, хотя я ничего не настраивал. Админы божаться, что тоже ничего не делали.

Вопрос закрыт. Все работает.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Service broker procedure. Access to the remote server is denied / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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