我正在构建一个需要通过文件共享将文件保存到文件表的应用程序。我已经设法让它工作,但我对所需的解决方案感到好奇。
就我而言,我使用的是部分包含的数据库(具有本地用户),我认为我可以简单地创建一个基于现有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]
不幸的是,这并没有起作用,我不断得到着名的#34;访问被拒绝错误(UnauthorizedAccessException:拒绝访问[path])。我设法让事情发挥作用的唯一方法是为我网站的应用池创建全局SQL Server登录。换句话说,我不得不用这样的东西替换创建用户:
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帐户/身份的包含用户来处理此类情况。
那么,我做错了什么吗?或者在这种情况下,我们确实需要创建一个全局登录?
由于
路易斯
答案 0 :(得分:0)
这是预期的功能,因为您需要使用集成安全性来使用文件流(因此需要具有权限的Windows登录才能写入底层文件系统)。
您不能使用在选项1中创建的用户,因为它只创建一个SQL用户,Windows无法用来访问和写入文件系统。通过创建全局SQL用户和与之关联的登录,应用程序池可以作为Windows登录登录到SQL Server并正确写入文件系统。