Файл определения существует (да / нет) в SQL Server 2016 - PullRequest
0 голосов
/ 30 сентября 2019

Мой клиент только что обновился с SQL Server 2000 до SQL Server 2016. Одна хранимая процедура, используемая 15-20 раз в день, просматривает таблицу имен файлов и отчеты для каждого о том, существует ли она.

Раньше он использовал xp_FileExist, но теперь, кажется, требует использования прав администратора. Я не могу предоставить всем 176 пользователям права администратора и сохранить мою работу.

Я нашел статьи, предлагающие использование GRANT IMPERSONATE и EXECUTE AS USER, но не могу заставить его работать.

-- Old code works only for administrators
-- non-administrators ALWAYS get 0 for result even when file exists

EXEC master.dbo.xp_fileexist @docUNC, @FileExists OUTPUT

-- code run using admin account

SELECT SUSER_NAME() LOGIN_Name, USER_NAME() username;  

Результаты

LOGIN_Name                   username
--------------------------------------
DomainName\potomcandice      dbo

-- attempted new code for grant impersonate (want to let maronj impersonate potomcandice)

GRANT IMPERSONATE ON USER:: maronj TO potomcandice

-- New code

EXECUTE AS USER='potomcandice' 

EXEC master.dbo.xp_fileexist @docUNC, @FileExists OUTPUT

По-прежнему получают 0 для результата, даже если файл существует.

Надеясь на предложения относительно а) как использовать «Предоставить олицетворение» и «Выполнить как пользователь /Войти "или б) альтернативы xp_fileexist, которые не включают xp_commandshell.

1 Ответ

0 голосов
/ 30 сентября 2019

Найдите своего SP в Обозревателе объектов, перейдите в Свойства SP. В открывшемся окне перейдите в «Разрешения», затем нажмите «Поиск» под именем SP. нажмите «Обзор», чтобы найти имя объекта и отметить «Public». Нажмите ОК. Затем отметьте Грант «Выполнить» и попробуйте, если он работает.

Это должно сработать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...