Estou configurando um FileTable para permitir que os usuários coloquem rapidamente alguns arquivos de relatório em PDF em um banco de dados para pesquisa posterior por meio de um aplicativo de intranet (a ser criado posteriormente). Classificar as permissões necessárias é um pouco desafiador e estou encontrando alguns obstáculos.
Primeiro, confirmei que eu (com privilégios de administrador de sistema) posso adicionar e remover arquivos do compartilhamento sem problemas, portanto, pelo menos, a FileTable é funcional.
Adicionei um usuário final a um grupo do AD, criei um logon do Windows no SQL Server para esse grupo, mapeei-o para um usuário do banco de dados e concedi a esse usuário permissões de seleção, inserção, atualização e exclusão na FileTable. O usuário saiu do computador e fez login novamente para garantir que o grupo ao qual o adicionei esteja no token de autenticação.
Ele pode acessar o compartilhamento de fluxo de arquivos base para a instância ( \\servername\FileStream
), mas quando tenta ir mais fundo no diretório específico do banco de dados ( \\servername\FileStream\DatabaseFileStreamDirectoryName
), ele recebe um erro de permissão ("Você não tem permissão para acessar..."). A mesma coisa se ele tentar acessar o caminho FileTable diretamente ( \\servername\FileStream\DatabaseFileStreamDirectoryName\PDFReports
).
Então, qual é a maneira correta de conceder acesso para que os usuários possam navegar até o subdiretório de compartilhamento para um banco de dados específico, ver os diretórios lá para FileTables e, finalmente, navegar/acessar arquivos dentro das FileTables? Aparentemente, é mais do que apenas um mapeamento de usuário no banco de dados e permissões de seleção/inserção/atualização/exclusão na tabela, e não estou encontrando muita documentação clara sobre isso até agora.
Aqui está o código (ligeiramente anônimo) que usei para configurar isso:
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]
Tive que recorrer a um pouco de adivinhação, mas, pelo que sei, não fiz nada excessivamente permissivo.
Comecei com uma conta de teste não privilegiada que é membro do grupo AD que criei e consegui navegar até o diretório FileStream para o banco de dados (
\\servername\FileStream\DatabaseFileStreamDirectoryName
), mas nada estava visível lá.Então, tentei a abordagem mais óbvia primeiro:
... Em seguida, pressione F5 na VM da qual eu estava navegando e o diretório para relatórios em PDF apareceu. Consegui navegar lá e copiar alguns arquivos para o diretório.
Então, acho que estou bem, mas gostaria que alguém aparecesse se eu tivesse feito alguma besteira.