帮助SQL Server中的OPENROWSET(假冒问题)

时间:2010-10-25 15:37:45

标签: sql-server openrowset

基本上我想在表格中选择pdf的内容。

我正在使用此查询:

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

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

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

...谢谢

3 个答案:

答案 0 :(得分: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 ] 

答案 1 :(得分:0)

将其包装在存储过程中并使用EXECUTE AS。您必须使用服务器权限和SQL权限模拟某人

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

答案 2 :(得分:0)

如果您要做很​​多事情,可以OSQL command line query(通过批处理文件或类似文件)进行:

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

您需要确定是否需要存储在数据库中的凭据,或者您希望在生产后可以删除的文件。