BULK INSERT权限被拒绝 - BLOB vs FILESTREAM

时间:2014-03-20 17:36:27

标签: sql sql-server vb.net sql-server-2008 database-administration

我的公司在安全方面非常严格。我的项目(使用VB.Net和SQL Server 2008构建)要求用户上载PDF文件,然后需要将这些文件与相关路径一起存储到数据库中。因为文件只有大约256kb或更少,我想将文件插入Single BLOB。我的表有两列Path varchar(50)File varbinary(max)。我的SQL查询看起来像这样:

INSERT INTO [DBNAME].[dbo].[SOMETABLE](PATH, FILE)
values ('C:\Somefile.pdf', (SELECT * FROM 
OPENROWSET(BULK N'C:\Somefile.pdf', SINGLE_BLOB)
AS import ))

不幸的是,我只对数据库拥有读写权限,因此产生以下错误:You do not have permission to use the bulk load statement.我已阅读此post但出于其他安全原因,我将不会被授予{{1} }或Insert权限。从我读过的其他帖子中,没有权限,这个选项似乎是一个死胡同。

现在,我正在研究使用ADMINISTER BULK OPERATIONS插入文件,但无法创建新数据库。我可以通过在现有数据库和数据库表上启用FILESTREAM并使用它们来实现此目的吗?我已经在这两天了,任何帮助或想法将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果您无法创建新数据库,我猜他们也不会让您更改现有数据库。您可以添加FILESTREAM功能,但它要求您至少创建一个新的FILEGROUP。如果服务器配置尚未设置为支持FILESTREAM功能,则还需要更改服务器配置。同样,在您描述的环境中听起来不太可能。此外,FILESTREAM通常建议用于较大的文件(> 1 MB),然后是你提到的256KB。

由于它们在您的环境中非常严格,您可以尝试将文档加载到VB前端,对其进行编码并将其作为字节数据从那里存储到数据库中。它不需要BLOB / BULK插入和听起来像在这样一个受限制的环境中它可能是一个更好的选择。

答案 1 :(得分:0)

为什么不通过普通的SQL语句和二进制数组加载文件?尺寸足够小,这意味着您只需要访问应用程序中的文件,而不是服务器需要查找和阅读它们。