使用file向Sql Server 2012 FileTable插入文件时,访问被拒绝.创建文件在ASP.网的网站

本文关键字:文件 创建 拒绝 ASP 网站 访问 Sql file Server 2012 使用 | 更新日期: 2023-09-27 18:06:24

我有一个ASP。网的网站。我想上传一个文件到网站,并将其保存到SqlServer 2012中的FileTable。

一旦上传,我的网站代码有一个流对象,我想保存使用

System.IO.File.Create()

FileTable可以在Windows资源管理器中访问,当我进入

''ComputerName'FileStremShareName'FileStreamDirectoryName'FileTableName

我可以用Windows资源管理器在这个文件夹中手动创建文件。我还可以使用SQL向File表中插入文件。在这两种情况下,Windows资源管理器和SQL Server都按预期显示文件。

但是,如果我尝试使用System.IO.File.CreateFile在路径中创建文件,例如
File.Create(''''ComputerName'FileStremShareName'FileStreamDirectoryName'FileTableName'myfile.jpg)

我得到消息"访问路径'[path]'被拒绝"

我认为这是因为我的IIS应用程序池身份没有访问该位置的读/写权限。

正常情况下,我会进入NTFS权限并为身份帐户分配读/写访问权限,但我无法这样做,因为底层文件夹对我隐藏了。

我考虑将我的流对象转换为字节数组,并使用SQL将其插入到FileTable中,但这似乎效率低下,因为我必须首先将流转换为字节数组,然后将其传递给SQL。这似乎是我解析我的文件数据两次保存它一次。

是否可以使用File写入文件表?在ASP中创建或类似。网的网站。如果有,我该怎么做?

使用file向Sql Server 2012 FileTable插入文件时,访问被拒绝.创建文件在ASP.网的网站

这是权限问题。但是,权限不是通过NTFS授予的,而是通过SQL Server授予的。

默认情况下,应用程序池标识对数据库没有任何权限,因此必须更改。

  1. 为您的网站使用的应用程序池标识添加登录到SQL Server。如。"IIS APPPool ' MyAppPool "

    <>之前使用(主)去用DEFAULT_DATABASE=[MyDatabase]从WINDOWS创建登录[IIS APPPOOL'myapppoolname]去
  2. 添加一个用户到你的数据库,这个登录将使用

    <>之前使用[MyDatabase]创建用户[MyUserName]用于登录[IIS APPPool'myapppoolname]
  3. 授予用户对数据库的相关权限

    <>之前使用[MyDatabase]授予INSERT权限给MyUserName授予SELECT权限给MyUserName授权更新[MyUserName]

我不确定这是否是所需的完整权限集,但我发现它足以让我能够保存一个新文件

接受的答案对我不起作用。这个链接中的答案是正确的。

我的IIS服务器和sql数据库不在同一台服务器上,所以我必须确保IIS的应用程序池用户作为sql服务器上的windows用户存在,他们有相同的密码,并且该帐户有一个sql windows用户

我也有同样的问题。下面的答案对我很有用。

  1. 在两台服务器上使用相同的密码创建一个新帐户
  2. 配置该帐户以运行IIS应用程序
  3. 在SQL Server中为该帐户创建一个具有相应权限的登录。