Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Хранимая процедура не видит прилинкованный сервер  [new]
melihron
Member

Откуда:
Сообщений: 32
Добрый день, коллеги.
Подскажите плиз, кто знает...
Пытаюсь сделать, чтобы из хранимой процедуры можно было работать с прилинкованным сервером НЕ под правами администратора.
В идеале ещё чтобы напрямую к таблицам линкованного сервера обратиться было нельзя (также, как и с обычными таблицами), а только через хранимку.
Давно копаюсь, на данном этапе дилемма такая... если ставлю учётке права сисадмина и убираю с прилинкованного сервера олицетворение для учётки, то таблицы сервера все видны, можно читать, удалять... чего хочешь... но это не нужно
А если убираю права сисадмина, то получается следующее:
Картинка с другого сайта.
select * from [inform]...[Дилеры]

ответ сервера :
Доступ к удаленному серверу запрещен из-за отсутствия сопоставления с именем входа.

добавляю олицетворение для учётки, после чего:
select * from [inform]...[Дилеры]
ответ сервера :
----------------------------------------
Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "inform" вернул сообщение "Не удается запустить приложение. Системная база данных отсутствует или открыта с монопольным доступом другим пользователем.".
Сообщение 7399, уровень 16, состояние 1, строка 1
Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "inform" сообщил об ошибке. Ошибка проверки подлинности.
Сообщение 7303, уровень 16, состояние 1, строка 1
Не удалось проинициализировать объект источника данных поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "inform".

----------------------------------------

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

Собственно вопрос: можно ли сделать так, чтобы таблицы прилинкованного сервера с гостевой учётки если даже и были бы видны, то нельзя было их прочитать, но чтобы можно было с ними работать из хранимых процедур на основном сервере.
Прилинкованный сервер - это акцессовский файл mdb.

И как побороть эту авторизацию, которая не даёт прочитать таблицы?

К сообщению приложен файл. Размер - 32Kb
6 апр 19, 15:42    [21854711]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура не видит прилинкованный сервер  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Почитайте про EXECUTE AS
6 апр 19, 16:34    [21854726]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура не видит прилинкованный сервер  [new]
melihron
Member

Откуда:
Сообщений: 32
Deff
Почитайте про EXECUTE AS
спасибо... копаю в этом направлении...
а есть пример как выполнить запрос в гостевой сессии от имени пользователя с бОльшими правами?
И ещё... даже если я это и смогу, то кроме 'sa' никто больше не видит таблиц прилинкованного сервера. Другому пользователю я не знаю, как это разрешить... (ну кроме как дать сисадминские права...)
6 апр 19, 18:16    [21854764]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура не видит прилинкованный сервер  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33269
Блог
melihron,

По ссылке все есть
6 апр 19, 18:37    [21854772]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура не видит прилинкованный сервер  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
melihron
Deff
Почитайте про EXECUTE AS
спасибо... копаю в этом направлении...
а есть пример как выполнить запрос в гостевой сессии от имени пользователя с бОльшими правами?
И ещё... даже если я это и смогу, то кроме 'sa' никто больше не видит таблиц прилинкованного сервера. Другому пользователю я не знаю, как это разрешить... (ну кроме как дать сисадминские права...)
Есть еще один EXECUTE AS - переключения контекста.

Но вы сказали что с помощью процедуры. Просто создать процедуру от пользователя с большИми правами, и пользоваться ей. Т.е. процедуру может выполнить тот, кому дали права на ее запуск. А у самой процедуры будет sa доступ.

А если в процедуре динамик sql, то пользоваться второй подсказкой.
6 апр 19, 18:46    [21854775]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура не видит прилинкованный сервер  [new]
melihron
Member

Откуда:
Сообщений: 32
Если в процедуре пишу запускать от 'sa', то выдаёт следующее :
ALTER PROCEDURE [dbo].[get_dealer_property]
(...)
with execute as 'sa'
AS
BEGIN
Сообщение 15151, уровень 16, состояние 1, процедура get_dealer_property, строка 70
Невозможно выполнить как пользователь "sa", так как он не существует или отсутствуют разрешения.


Пользователю slon дал админские права, написал в процедуре, чтобы работала от него :
ALTER PROCEDURE [dbo].[get_dealer_property]
(...)
with execute as 'slon'
AS
BEGIN

exec get_dealer_property 
Сообщение 15274, уровень 16, состояние 1, процедура get_dealer_property, строка 38
Доступ к удаленному серверу запрещен, поскольку текущий контекст безопасности не является доверенным.


в первом случае slon не видит sa похоже...
а во втором видимо надо ещё что-то прописывать...
6 апр 19, 19:11    [21854789]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура не видит прилинкованный сервер  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Создать процедуру из под sa, и написать as owner. Вроде так.
6 апр 19, 19:43    [21854804]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура не видит прилинкованный сервер  [new]
melihron
Member

Откуда:
Сообщений: 32
ALTER PROCEDURE [dbo].[get_dealer_property]
(...)
with execute as owner
AS
BEGIN

exec get_dealer_property 

Сообщение 15517, уровень 16, состояние 1, процедура get_dealer_property, строка 0
Невозможно выполнить в качестве участника базы данных, поскольку участник "dbo" не существует, этот тип участника не может проходить олицетворение, или отсутствует разрешение.
6 апр 19, 19:47    [21854805]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура не видит прилинкованный сервер  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 763
melihron
Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "inform"


А удаленный сервер не на excel файл ссылается? Если да - а существует ли файл? И не открыт ли он кем-то?
6 апр 19, 19:58    [21854811]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура не видит прилинкованный сервер  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
melihron
ALTER PROCEDURE [dbo].[get_dealer_property]
(...)
with execute as owner
AS
BEGIN


exec get_dealer_property 


Сообщение 15517, уровень 16, состояние 1, процедура get_dealer_property, строка 0
Невозможно выполнить в качестве участника базы данных, поскольку участник "dbo" не существует, этот тип участника не может проходить олицетворение, или отсутствует разрешение.
Другая ошибка совсем. У аксеса нет дбо наверное. Тут может проблема в другом.
Я думаю вместо точек надо правильно указать путь к таблице.
6 апр 19, 20:08    [21854816]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура не видит прилинкованный сервер  [new]
melihron
Member

Откуда:
Сообщений: 32
настроил кажись... вся проблема у меня была в том, что не был установлен владелец базы, етить его... как пишут в других форумах - это может происходить из-за того, что БД была восстановлена из бакапа.

Deff был на правильном пути... Всем спасибо :)
8 апр 19, 13:34    [21855855]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура не видит прилинкованный сервер  [new]
melihron
Member

Откуда:
Сообщений: 32
PS: ну и контекст безовасности надо было выставить
alter database dbname set trustworthy on
8 апр 19, 13:37    [21855868]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить