基本上我想在表格中选择pdf的内容。
我正在使用此查询:
SELECT *
FROM OPENROWSET(BULK N'\\Server\Share\filename.pdf', SINGLE_BLOB) rs
查询将不会运行,因为我的用户名没有该服务器的权限(也不应该),但我需要能够以其他用户身份进行身份验证才能执行此查询。
它可能不会是生产中的问题,因为我相信运行该命令的帐户将具有适当的权限,但实际上,我希望能够“模仿”该用户(我显然拥有其凭据)并从我的帐户运行查询。关于如何做到这一点的任何想法?
...谢谢
答案 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权限模拟某人。
答案 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)"
您需要确定是否需要存储在数据库中的凭据,或者您希望在生产后可以删除的文件。