Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server中OPENROWSET的帮助(模拟问题)_Sql Server_Openrowset - Fatal编程技术网

Sql server SQL Server中OPENROWSET的帮助(模拟问题)

Sql server SQL Server中OPENROWSET的帮助(模拟问题),sql-server,openrowset,Sql Server,Openrowset,基本上,我希望选择一个pdf的内容到一个表中 我正在使用此查询: SELECT * FROM OPENROWSET(BULK N'\\Server\Share\filename.pdf', SINGLE_BLOB) rs 查询将不会运行,因为我的用户名在该服务器上没有权限,也不应该有权限,但我需要能够作为其他用户进行身份验证以执行此查询 这可能不会成为生产中的问题,因为我相信运行该命令的帐户将具有适当的权限,但事实上,我希望能够模拟此用户,因为我显然有其凭据,并从我的帐户运行查询。有什么办

基本上,我希望选择一个pdf的内容到一个表中

我正在使用此查询:

SELECT *
FROM   OPENROWSET(BULK N'\\Server\Share\filename.pdf', SINGLE_BLOB) rs
查询将不会运行,因为我的用户名在该服务器上没有权限,也不应该有权限,但我需要能够作为其他用户进行身份验证以执行此查询

这可能不会成为生产中的问题,因为我相信运行该命令的帐户将具有适当的权限,但事实上,我希望能够模拟此用户,因为我显然有其凭据,并从我的帐户运行查询。有什么办法吗


谢谢…

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


您可以在中指定连接字符串的详细信息。请参阅下面语法的{'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-U[username]-p[password]-S[server]-D[database]-q EXITSELECT*FROM OPENROWSETBULK N'\\server\Share\filename.pdf',单块


您需要确定是否要将凭据存储在数据库中,或者存储在一个文件中,您可以在进入生产后将其删除。

@Joe-如果他在存储过程中执行此操作,凭据是否会以纯文本形式存储?@JNK:是的,但根据OP的评论,这不会成为生产中的问题,我认为这在开发环境中是合理的。遗憾的是,用户id不能是Windows登录名,这正是我想要的need@Joe-我认为这也是合理的,我只是想验证一下。@user468341:您想在您的案例中使用“provider_string”选项,而不是“datasource”用户_id';'“密码”选项。有关构造字符串的帮助,请参阅。