9

我正在构建一个需要通过文件共享将文件保存到文件表的应用程序。我已经设法让它工作,但我对所需的解决方案很好奇。

就我而言,我使用的是部分包含的数据库(具有本地用户),我认为我可以简单地基于现有的 ASP.NET 身份创建一个新用户并授予它一些权限。

我的第一次尝试看起来像这样:

use [clip]
go
create user [IIS APPPool\Test]

GRANT INSERT on object::ImagensEditor TO [IIS APPPOOL\Test] 
GRANT SELECT on object::ImagensEditor TO [IIS APPPOOL\Test] 
GRANT UPDATE on object::ImagensEditor TO [IIS APPPOOL\Test] 

不幸的是,这不起作用,我不断收到“著名的”访问被拒绝错误(UnauthorizedAccessException: Access to [path] is denied)。我设法让事情正常进行的唯一方法是为我的站点的应用程序池创建一个全局 SQL Server 登录。换句话说,我不得不将 create user 替换为如下所示的内容:

use master
go

CREATE login [IIS APPPOOL\Test] from windows with default_database=[clip]
GO

use [clip]
CREATE user [IIS APPPOOL\clipfrontoffice] for login [IIS APPPOOL\Test]
go

然后一切都开始工作(不再出现拒绝访问错误)。

现在,我还没有找到任何文档提到我不能使用基于 Windows 帐户/身份的包含用户来处理这种类型的场景。

那么,我是不是做错了什么?或者在这种情况下,我们真的需要创建一个全局登录吗?

谢谢

路易斯

4

1 回答 1

0

这是预期的功能,因为您需要使用集成安全性来使用文件流(因此需要具有权限的 Windows 登录才能写入底层文件系统)。

您不能使用在选项 1 中创建的用户,因为它只会创建 Windows 无法用于访问和写入文件系统的 SQL 用户。通过创建全局 SQL 用户和与之关联的登录名,应用程序池可以作为 Windows 登录名登录到 SQL Server 并正确写入文件系统。

于 2018-04-05T21:13:56.743 回答