导出 blob 需要哪些权限

Posted

技术标签:

【中文标题】导出 blob 需要哪些权限【英文标题】:Which permissions are needed to export blobs 【发布时间】:2020-04-06 19:44:58 【问题描述】:

我将二进制数据导入 SQL Server 2012 Express。这行得通。

但我无法将其导出到硬盘上的文件中。 我非常认为尝试导出的用户在 SQL 服务器上的权限不正确或缺失。

我用 blob 数据备份了数据库,并将其复制到另一台机器上,并且脚本按预期工作。在这台开发机器上没有域用户,没有特定用户登录。

所以我的问题是:导出 blob 需要哪些角色、权限等?

在不工作的机器上,我根本没有收到任何错误,似乎一切正常,但没有创建任何文件。文件夹结构将允许创建文件。

我在网上发现了其他用户的类似问题,他们也要求某些权限,但没有得到任何回复。

使用的脚本

   DECLARE @ImageData VARBINARY (max);
   DECLARE @Path2OutFile NVARCHAR (2000);
   DECLARE @Obj INT


   SET NOCOUNT ON

  SELECT @ImageData = (SELECT PictureData FROM [dbo].[ScanIT_tblProjektbilder] WHERE ID= @PicID);

   SET @Path2OutFile = 'C:\Users\michael\Desktop\test.jpg' -- CONCAT(@ImageFolderPath ,'\', @Filename );


BEGIN TRY
 EXEC sp_OACreate 'ADODB.Stream' ,@Obj OUTPUT;
 EXEC sp_OASetProperty @Obj ,'Type',1;
 EXEC sp_OAMethod @Obj,'Open';
 EXEC sp_OAMethod @Obj,'Write', NULL, @ImageData;
 EXEC sp_OAMethod @Obj,'SaveToFile', NULL, @Path2OutFile, 2;
 EXEC sp_OAMethod @Obj,'Close';
 EXEC sp_OADestroy @Obj;
END TRY

 BEGIN CATCH
  EXEC sp_OADestroy @Obj;
 END CATCH

【问题讨论】:

【参考方案1】:

您可能需要允许在服务器上运行 OA 存储过程(完成后将其关闭):

sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'Ole Automation Procedures', 1;  
GO  
RECONFIGURE;  
GO

【讨论】:

对不起,我忘了说在那之前,“OLE 自动化程序”当然是重新配置的。【参考方案2】:

对于发布的代码,为了使用所有sp_OA* 过程,需要sysadmin 固定服务器角色的成员资格或直接在每个sp_OA* 上的execute 权限。你可以在这里找到它sp_OACreate (Transact-SQL)

【讨论】:

【参考方案3】:

我发现了问题:似乎SQL-server无法导出和写入C的任何文件夹:

我在 3 台机器上试过,到处都是同样的问题。 当我导出到任何其他本地驱动器时,它可以工作,但不能在 C:

现在,我尝试找出如何在 C: 上为某个用户启用写权限。

我想这个用户一定是登录到 SQL-server 的用户。

【讨论】:

以上是关于导出 blob 需要哪些权限的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库的导入对于用户需要啥权限? 必须用导出时的用户导入么?

Oracle导入数据需要哪些权限

导出文件blob类型

Vue.js使用Blob的方式实现excel表格的下载(流文件下载)

Vue通过Blob对象实现导出Excel功能

jdbc 读写 blob 类型有哪些方式?