2

基本上,我希望将 pdf 的内容选择到表格中。

我正在使用这个查询:

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

该查询不会运行,因为我的用户名在该服务器上没有权限(也不应该),但我需要能够以其他用户身份进行身份验证才能执行此查询。

这在生产中可能不会成为问题,因为我相信运行命令的帐户将具有适当的权限,但事实上,我希望能够“模拟”这个用户(我显然有它的凭据)并运行来自我帐户的查询。关于如何做到这一点的任何想法?

谢谢...

4

3 回答 3

2

您可以在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 ] 
于 2010-10-25T15:42:23.197 回答
0

将其包装在存储过程中并使用EXECUTE AS. 您必须冒充具有服务器权限和 SQL 权限的人。

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

于 2010-10-25T15:41:20.393 回答
0

如果你会做很多,你可以做一个OSQL 命令行查询(通过一个批处理文件或类似的):

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

您需要确定是要将凭据存储在数据库中还是存储在投入生产后可以删除的文件中。

于 2010-10-25T15:43:31.537 回答