Помощь с OPENROWSET в SQL Server (проблема олицетворения) - PullRequest
2 голосов
/ 25 октября 2010

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

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

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

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

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

Спасибо ...

Ответы [ 3 ]

2 голосов
/ 25 октября 2010

Вы можете указать информацию о строке подключения в 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 ] 
0 голосов
/ 25 октября 2010

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

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

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

0 голосов
/ 25 октября 2010

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

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

...