gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:04:17 24 4
gpt4 key购买 nike

我有一个 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)

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

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

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

我考虑过将我的 Stream 对象转换为字节数组并使用 SQL 将其插入到 FileTable 中,但这似乎效率不高,因为我必须先将流转换为字节数组,然后再将其传递给 SQL。这好像我正在解析我的文件数据两次以保存一次。

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

最佳答案

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

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

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

    USE [master]GOCREATE LOGIN [IIS APPPOOL\myapppoolname] FROM WINDOWS WITH DEFAULT_DATABASE=[MyDatabase]GO
  2. 将用户添加到您的数据库,此登录将使用

    USE [MyDatabase]CREATE USER [MyUserName] FOR LOGIN [IIS APPPool\myapppoolname]
  3. 授予用户对您的数据库的相关权限

    use [MyDatabase]GRANT INSERT TO [MyUserName]GRANT SELECT TO [MyUserName]GRANT UPDATE TO [MyUserName]

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

关于c# - 在 ASP.NET 网站中使用 File.CreateFile 将文件插入 Sql Server 2012 FileTable 时访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24023684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com