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