繁体   English   中英

使用ASP.NET网站中的File.CreateFile将文件插入Sql Server 2012 FileTable时访问被拒绝

[英]Access Denied when inserting file into Sql Server 2012 FileTable using File.CreateFile in ASP.NET website

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

上传后,我的网站代码有一个Stream对象,我想用它来保存

System.IO.File.Create()

我去的时候可以在Windows资源管理器中访问FileTable

\\ComputerName\FileStremShareName\FileStreamDirectoryName\FileTableName

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

但是,如果我尝试使用System.IO.File.CreateFile在路径中创建文件,例如

File.Create(\\\\ComputerName\FileStremShareName\FileStreamDirectoryName\FileTableName\myfile.jpg)

我收到消息“访问路径'[路径]'被拒绝”

我认为这是因为我的IIS应用程序池标识无权读取/写入此位置。

通常,我会进入NTFS权限并分配对身份帐户的读/写访问权限,但我无法执行此操作,因为基础文件夹对我来说是隐藏的。

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

是否可以使用File.Create或类似的内容在ASP.NET网站中写入文件表。 如果是这样,我该怎么做?

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

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

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

    \n 使用[主人]\n \n 使用DEFAULT_DATABASE = [MyDatabase]从WINDOWS创建登录[IIS APPPOOL \\ myapppoolname]\n \n
  2. 将用户添加到此登录将使用的数据库中

    \n 使用[MyDatabase]\n 创建用户[MyUserName] FOR LOGIN [IIS APPPool \\ myapppoolname]\n
  3. 授予用户对数据库的相关权限

    \n 使用[MyDatabase]\n GRANT INSERT TO [MyUserName]\n GRANT SELECT TO [MyUserName]\n 授予[MyUserName]更新权限\n

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

认可的答案对我不起作用。 这个链接的答案确实如此。

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

我遇到过同样的问题。 以下答案适合我。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM