Справка по OPENROWSET в SQL Server (проблема олицетворения)

В основном я ищу, чтобы выбрать содержимое PDF в таблицу.

Я использую этот запрос:

SELECT *
FROM   OPENROWSET(BULK N'\\Server\Share\filename.pdf', SINGLE_BLOB) rs

Запрос не будет запущен, потому что мое имя пользователя не имеет разрешений на этом сервере (и не должно), но мне нужно иметь возможность аутентифицироваться как другой пользователь для выполнения этого запроса.

Это, вероятно, не будет проблемой в работе, так как я считаю, что учетная запись, выполняющая команду, будет иметь надлежащие разрешения, но, как бы то ни было, я хотел бы иметь возможность "выдать себя" за этого пользователя (у меня, очевидно, есть его учетные данные) и запустить запрос из моего аккаунта. Есть идеи, как это сделать?

Спасибо...

3 ответа

Решение

Вы можете указать свои строки подключения в OPENROWSET. Увидеть { 'datasource';'user_id';'password' | 'provider_string' } часть синтаксиса ниже.

OPENROWSET 
( { 'provider_name', { 'datasource';'user_id';'password' 
   | 'provider_string' } 
   , {   [ catalog. ] [ schema. ] object 
       | 'query' 
     } 
   | BULK 'data_file', 
       { FORMATFILE ='format_file_path' [ <bulk_options> ]
       | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }
} )<bulk_options> ::=
   [ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ] 
   [ , ERRORFILE ='file_name' ]
   [ , FIRSTROW = first_row ] 
   [ , LASTROW = last_row ] 
   [ , MAXERRORS = maximum_errors ] 
   [ , ROWS_PER_BATCH =rows_per_batch ] 

Если вы будете делать это много, вы можете сделать это как запрос командной строки OSQL (через пакетный файл или аналогичный):

OSQL -U [username] -p [password] -S [server] -D [database] -q "EXIT(SELECT * FROM OPENROWSET(BULK N'\\Server\Share\filename.pdf', SINGLE_BLOB) rs)"

Вам необходимо определить, хотите ли вы, чтобы учетные данные хранились в базе данных или в файле, который вы можете удалить, как только приступите к работе.

Оберните это в хранимую процедуру и используйте EXECUTE AS, Вам придется выдавать себя за человека с правами на сервер, а также с правами SQL.

http://msdn.microsoft.com/en-us/library/ms188354.aspx

Другие вопросы по тегам