使用ASP.NET网站中的File.CreateFile将文件插入Sql Server 2012 FileTable时访问被拒绝
我有一个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授予的。
默认情况下,应用程序池标识对您的数据库没有任何权限,因此必须更改。
-
为您的网站添加用于应用程序池标识的SQL Server登录。 例如“IIS APPPool \ MyAppPool”
使用[主人] 走 使用DEFAULT_DATABASE = [MyDatabase]从WINDOWS创建登录[IIS APPPOOL \ myapppoolname] 走
-
将用户添加到此登录将使用的数据库中
使用[MyDatabase] CREATE USER [MyUserName] FOR LOGIN [IIS APPPool \ myapppoolname]
-
授予用户与数据库相关的权限
使用[MyDatabase] GRANT INSERT TO [MyUserName] GRANT SELECT TO [MyUserName] 授予[MyUserName]更新权限
我不确定这是否是所需的完整权限集,但我发现它足以让我能够保存新文件。
认可的答案对我不起作用。 这个链接的答案确实如此。
我的IIS服务器与sql数据库不在同一台服务器上,所以我必须确保IIS的应用程序池用户在sql server上作为windows用户存在,他们有相同的密码并且有一个sql窗口该帐户的用户。
我遇到过同样的问题。 以下答案适合我。
- 使用相同的密码在两台服务器上创建一个新帐户。
- 配置该帐户以运行IIS应用程序
- 在具有相应权限的该帐户的SQL Server中创建登录。
- 在浏览器中显示word / pdf / excel等文件。 (Asp.net,C#.net 2008)
- ContinueWith失去SynchronizationContext
- 如何在buttton的onClick事件上使用asp.net下载文件?
- 根据用户角色将XML站点地图加载到MvcSiteMapProvider中
- 如何将存储过程的多个结果存储到数据集中?
- 水平和垂直手风琴
- 这两个HttpContext.Current.Session和Session – asp.net 4.0有什么区别
- ASP.NET MVC OWIN和SignalR – 两个Startup.cs文件
- 在ASP.NET MVC5上设置值之后,静态属性在每个请求中始终为null