我正在设置一个 FileTable 以允许用户将一些 PDF 报告文件快速填充到数据库中,以便以后通过 Intranet 应用程序(稍后构建)进行搜索。整理出必要的权限有点挑战,我遇到了一些障碍。
首先,我已经确认我(具有系统管理员权限)可以毫无问题地向共享添加和删除文件,因此 FileTable 至少可以正常工作。
我已将最终用户添加到 AD 组,在 SQL Server 中为该组创建了 Windows 登录,将其映射到数据库用户,并授予该用户对 FileTable 的选择、插入、更新和删除权限。用户已注销他的计算机并再次登录以确保我将他添加到的组在身份验证令牌中。
他可以访问实例的基本文件流共享 ( \\servername\FileStream
),但是当他尝试更深入地访问特定于数据库的目录 ( \\servername\FileStream\DatabaseFileStreamDirectoryName
) 时,他会收到权限错误(“您没有访问权限...”)。如果他尝试直接访问 FileTable 路径 ( \\servername\FileStream\DatabaseFileStreamDirectoryName\PDFReports
),也是如此。
那么,授予访问权限的正确方法是什么,以便用户可以浏览到特定数据库的共享子目录,查看其中的 FileTables 目录,并最终浏览/访问 FileTables 中的文件?它显然不仅仅是数据库中的用户映射,以及对表的选择/插入/更新/删除权限,到目前为止,我还没有找到很多明确的文档。
这是我用来设置的(稍微匿名的)代码:
USE master
GO
ALTER DATABASE AppData ADD FILEGROUP FS CONTAINS FILESTREAM
ALTER DATABASE AppData ADD FILE ( NAME = N'FS', FILENAME = N'S:\Filestream\AppData\FS' ) TO FILEGROUP [FS]
ALTER DATABASE AppData SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE AppData SET FILESTREAM( DIRECTORY_NAME = N'AppData' ) WITH NO_WAIT
ALTER DATABASE AppData SET MULTI_USER
GO
USE AppData
GO
CREATE TABLE PDFReports AS FileTable WITH (FileTable_Directory = 'PDFReports')
GRANT SELECT, INSERT, UPDATE, DELETE ON PDFReports TO [MyDomain\App Operators]
我不得不求助于一些猜测,但据我所知,我没有做过任何过于宽容的事情。
我从一个非特权测试帐户开始,该帐户是我创建的 AD 组的成员,我能够导航到数据库的 FileStream 目录 (
\\servername\FileStream\DatabaseFileStreamDirectoryName
),但那里什么都看不到。所以,我首先尝试了最明显的方法:
...然后在我正在浏览的 VM 中按 F5,PDF 报告的目录就出现了。我能够在那里浏览,并将一些文件复制到目录中。
所以我认为我很好,但如果我做了任何愚蠢的事情,我会很感激任何人。