Estou tentando fazer backup do SQL Server em um diretório ao qual usuários diferentes devem ter acesso. Para fazer isso, crio um grupo de usuários e incluo o usuário mssql lá - mas quando tento criar um backup, aparece um erro de "acesso negado".
Aqui está o que eu faço:
- Crie um grupo de usuários:
sudo groupadd sample_group`
- Adicionar
mssql
usuário ao novo grupo:
sudo usermod -a -G sample_group mssql
- O resultado do
cat /etc/group | grep mssql
comando é:
mssql:x:999: sample_group:x:1006:mssql
- Crie um diretório:
sudo mkdir /tmp/backup_dir/
- Adicione
sample_group
o grupo de usuários ao diretório e forneça privilégios a este diretório:
sudo chgrp sample_group /tmp/backup_dir/ sudo chmod 771 /tmp/backup_dir/
- O resultado do
sudo ls -l /tmp/ | grep sample_group
comando é:
drwxrwx--x 2 root sample_group 4096 18 de fevereiro 12:11 backup_dir
- Tente fazer backup neste diretório:
sqlcmd -U sa -P ********* -Q "backup database AdventureWorks TO disk='/tmp/backup_dir/1.bak'"
->
Msg 3201, Nível 16, Estado 1, Servidor ubuntuAutoTest, Linha 1 Não é possível abrir o dispositivo de backup '/tmp/backup_dir/1.bak'. Erro do sistema operacional 5 (Acesso negado.). Msg 3013, Nível 16, Estado 1, Servidor ubuntuAutoTest, Linha 1
Por que não há acesso? SQL Server é executado como mssql
usuário. mssql
usuário está no sample_group
grupo, que possui o /tmp/backup_dir/
diretório
Notas:
Se eu usar chmod 777
, os backups serão criados em nome do mssql
usuário, o arquivo criado pertence ao mssql
grupo de usuários.
Se eu especificar mssql
o grupo de usuários como os proprietários do diretório, os backups serão criados.
Se eu for ao /tmp/backup_dir/
diretório em nome do mssql
usuário ( sudo su - mssql
), então posso criar arquivos, sem problemas, há todas as permissões.
Para um banco de dados PostgreSQL, seguir os passos acima funciona sem problemas. Apenas o postgres
usuário é usado em vez do mssql
usuário.
mssql precisará fazer login novamente antes de obter o novo grupo. O mais fácil seria reiniciar esse servidor.
Solução alternativa:
Adicione os usuários que precisam ler o backup ao sample_group e, em seguida,
Teste se os usuários podem ler o backup (vai depender do umask do mssql), se não: