Erro 5 do sistema operacional do SQL Server: "5 (acesso negado.)"

153

Estou começando a aprender SQL e tenho um livro que fornece um banco de dados para trabalhar. Esses arquivos abaixo estão no diretório, mas o problema é que, quando executo a consulta, ocorre o seguinte erro:

Mensagem 5120, nível 16, estado 101, linha 1 Não é possível abrir o arquivo físico "C: \ Murach \ SQL Server 2008 \ Databases \ AP.mdf". Erro do sistema operacional 5: "5 (acesso negado.)".

   CREATE DATABASE AP
      ON PRIMARY (FILENAME = 'C:\Murach\SQL Server 2008\Databases\AP.mdf')
      LOG ON (FILENAME =     'C:\Murach\SQL Server 2008\Databases\AP_log.ldf')
      FOR ATTACH
    GO

No livro, o autor diz que deve funcionar, mas não está funcionando no meu caso. Eu procurei, mas não sei exatamente qual é o problema, então postei esta pergunta.

dijai jijfs
fonte
Se o arquivo de backup já existir, verifique se ele não possui o atributo "somente leitura", além de garantir que o serviço tenha permissão de gravação.
jumxozizi

Respostas:

133

A conta de serviço do mecanismo de banco de dados do SQL Server deve ter permissões para ler / gravar na nova pasta.

Confira isso

Para corrigir, fiz o seguinte:

Adicionado o grupo de administradores às permissões de segurança do arquivo com controle total para o arquivo de dados (S :) e o arquivo de log (T :).

Anexou o banco de dados e funciona bem.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Rahul Tripathi
fonte
4
Às vezes servidor SQL será executado sob um grupo de usuários diferente que não sejaAdministrators Group
JDandChips
57
Além disso, pode ser útil iniciar o SQL Server Management Studio como administrador, não apenas o serviço do servidor.
David.barkhuizen
1
Para mim, a solução no seguinte link funcionou: stackoverflow.com/a/19061137/365188
Ozair Kafray
3
Para mim, alterar a conta do Serviço do Agente do SQL Server para Sistema local funcionou.
Singhm0077 22/09/2015
22
Se sua instância do SQL Server estiver sendo executada em uma conta de serviço (por exemplo, a minha é MSSQL$SQLEXPRESS), pode não ser óbvio que você precise adicionar a conta à lista de permissões de pasta como:NT Service\MSSQL$SQLEXPRESS
Brian Lacy
109

Uma publicação antiga, mas aqui está um passo a passo que funcionou para o SQL Server 2014 em execução no Windows 7:

  • Painel de Controle ->
  • Sistema e Segurança ->
  • Ferramentas Administrativas ->
  • Serviços ->
  • Clique duas vezes em SQL Server (SQLEXPRESS) -> clique com o botão direito do mouse em Propriedades
  • Selecione a guia Logon
  • Selecione "Conta do sistema local" (o padrão era uma conta obtusa do sistema Windows)
  • -> OK
  • clique direito, Parar
  • clique com o botão direito do mouse em Iniciar

Voilá!

Eu acho que definir a conta de logon pode ter sido uma opção na instalação, mas se não, não era o padrão e era fácil perder se você ainda não estava ciente desse problema.

MickeyfAgain_BeforeExitOfSO
fonte
5
Eu tentei muitas opções, mas sua resposta está funcionando bem. Obrigado mickeyf.
Vicky
2
Funciona para o SQL Server 2014 no Win 10 também. Obrigado.
Johan Foley
7
-1 Fazer isso vai contra toda a idéia de configurar esse usuário em primeiro lugar. É um recurso de segurança, e isso é contornado.
NullUserException
2
WOW .. Não é possível acreditar que as pessoas tenham pulado nessa "resposta". Isso pode criar um grande problema de segurança. Caso contrário, não haveria um motivo para definir esse usuário a princípio, certo? De qualquer forma, é uma "solução" para pessoas que não consideram isso como um problema de segurança em seus casos.
precisa saber é o seguinte
2
Quem pensa que a segurança é mais importante do que fazer algum trabalho pode simplesmente desligar o servidor SQL!
2137 Ivan Ivan
44

Para contornar o problema de acesso negado, iniciei o SSMS como administrador e isso me permitiu anexar um banco de dados da minha unidade local. O banco de dados foi criado em outra instância do SQL e do Windows.

JayKayOf4
fonte
3
era isso para mim ... Estou apenas olhando para uma instalação totalmente local e obtive esse problema, no Windows 10 Home, e anteriormente eu havia feito o "proprietário" do mdf & ldf por outro motivo - talvez relevante
Mike M
3
Isso funciona para mim também. Estou usando o Windows 10 e o Microsoft SQL Server 2012. Executei o SQL Management Studio como administrador e, em seguida, consegui anexar o banco de dados Adventure Work Sample.
Arsho 5/02
1
Isso também resolveu o problema com o Windows 10 Pro ao executar em um ambiente de domínio de trabalho.
PerPlexSystem
Mesmo domínio - Env, SSMS 2017.x, Win10 Pro. Desconectado de outra máquina e Anexado em uma nova máquina.
precisa saber é o seguinte
44

Esse é um problema relacionado ao Windows, no qual o SQL Server não tem a permissão apropriada para a pasta que contém o arquivo .bak e, portanto, esse erro.

A solução mais fácil é copiar o arquivo .bak para o local de backup padrão do SQL, que possui todas as permissões necessárias. Você não precisa mexer em mais nada. No SQL SERVER 2012 , esse local é

D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup (SQL 2012)
C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup (SQL 2014)
C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Backup (SQL 2016)
Hammad Khan
fonte
@AdamLevitt você tem várias versões do SQL instaladas ou instaladas anteriormente? Tem certeza de que está colocando no local correto?
Hammad Khan
1
@ hmd, obrigado eu faço. A correção foi exportada para o diretório de backups de 2012.
Adam Levitt
1
Esta solução também funciona no SQL Server 2014. O caminho é C: \ Arquivos de Programas \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Nick King
Esta deve ser a resposta !!
Axel
Eu tive um problema semelhante com o MS SQL Express 2016, a solução foi colocar meu arquivo mdf na pasta: C: \ Arquivos de Programas \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup
jirikadlec2
14

Eu tive esse problema. Basta executar o SQL Server como administrador

Aref Bozorgmehr
fonte
1
'Executar como administrador', como no UAC, funcionou para mim. Não precisei fazer login como administrador da conta (no entanto, estou no grupo de administradores).
9788
1
Sim, fez a mesma coisa, execute como administrador e tudo correu bem.
Clyde
12

Sim, está certo. Primeiro, você deve descobrir sua conta de serviço do sqlserver, pode vê-la no Gerenciador de Tarefas ao pressionar ctrl + alt + delete ao mesmo tempo; depois, você deve conceder o privilégio de leitura / gravação de "C : \ Murach \ SQL Server 2008 \ Databases "para a conta de serviço.

Tim
fonte
10

O problema é devido à falta de permissões para o SQL Server acessar os arquivos mdf e ldf. Todos estes procedimentos funcionarão:

  1. você pode alterar diretamente a conta de usuário de inicialização do serviço MSSQLSERVER, com a conta de usuário que possui melhores privilégios nos arquivos. Em seguida, tente anexar o banco de dados.
  2. Ou você pode atribuir o usuário ao arquivo na guia segurança das propriedades dos arquivos mdf e ldf com os privilégios de leitura e gravação marcados.
  3. Inicialize com a conta de administrador do Windows, abra o SQL Server com a opção Executar como administrador e tente fazer login com autenticação do Windows e agora tente anexar o banco de dados.
Chandra Sekhar
fonte
9

Eu resolvo esse problema adicionando Full controlpermissão para arquivos .mdfe .ldfpara o Usersgrupo.

Sayed Abolfazl Fatemi
fonte
5

Para mim, foi resolvido da seguinte maneira com o SQL Server Management studio - Entre como administrador (entrei como autenticação do Windows) - Anexe o arquivo mdf (clique com o botão direito do mouse em Banco de dados | anexar | Adicionar) - Saia como administrador - Entre como usuário normal

RotatingWheel
fonte
4

As permissões reais do servidor não importam neste momento; tudo parece ok. O próprio SQL Server precisa de permissões de pasta.
dependendo da sua versão, você pode adicionar permissões SERVERNAME $ MSSQLSERVER para tocar sua pasta. Caso contrário, ele deverá estar no diretório BACKUP padrão (onde você o instalou ou usar como padrão c: \ programfiles (x) \ MSSQL \ BACKUP.

Claudia
fonte
2

Mesmo se você seguir as etapas a seguir, poderá receber a mesma mensagem de erro.

1. login as SA user (SSMS)
2. Edit the file permissions to say "everyone" full access (windows folder)
3. Delete the Log file (Windows Exploring  (this was what I had done per advise from some msdn forum) 

Ainda obtive o erro de permissão, mas notei que na tela Anexar, a seção inferior AINDA mostrava o arquivo LOG e a mensagem de erro permanecia a mesma.

Espero que isso ajude alguém que fez a mesma coisa.

Tom Stickel
fonte
0

Solução muito simples.

  1. Entre com o administrador do sistema
  2. copie seus arquivos mdf e ldf em "C: \ Arquivos de programas (x86) \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA" Onde todos os outros arquivos de dados são exibidos.
  3. Agora anexe a partir daí ele vai funcionar
AmitykSharma
fonte
1
Você não deve armazenar dados no diretório de arquivos do programa. O local padrão deve ser alterado quando você instala o SQL Server
OrangeKing89
0

Eu usei o Entity Framework no meu aplicativo e tive esse problema, configurei qualquer permissão nos serviços de pastas e janelas e não funcionou. Depois disso, inicio meu aplicativo como administrador (clique com o botão direito do mouse no arquivo exe e selecione "executar como administrador") e isso funciona bem.

Ali Yousefi
fonte
0

Se você receber esse erro em um .MDFarquivo na APP_DATApasta (ou onde quer que você o tenha colocado) para um projeto do Visual Studio, a maneira como fiz foi copiar as permissões da DATApasta existente aqui (estou usando o SQL Express 2014 para oferecer suporte) um aplicativo mais antigo):

C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS2014\MSSQL\DATA

(observação: seu caminho de instalação real pode variar - especialmente se o nome da sua instância for diferente)

Clique duas vezes na DATApasta primeiro como administrador para garantir que você tenha acesso, abra as propriedades na pasta e imite as mesmas para a APP_DATApasta. No meu caso, o usuário ausente era MSSQL$SQLEXPRESS2014(porque eu nomeei a instância SQLEXPRESS2014- a sua pode ser diferente). Esse também é o nome de usuário do serviço SQL Server.

James Wilkins
fonte
0

Por algum motivo, definir todas as permissões corretas não ajudou no meu caso. Eu tinha um arquivo db.bakque não consegui restaurar devido ao 5(Access is denied.)erro. O arquivo foi colocado na mesma pasta que vários outros arquivos de backup e todas as permissões eram idênticas a outros arquivos. Consegui restaurar todos os outros arquivos, exceto este db.bakarquivo. Até tentei alterar o log de serviço do SQL Server no usuário - ainda o mesmo resultado. Eu tentei copiar o arquivo sem efeito.

Então tentei criar um arquivo idêntico executando

type db.bak > db2.bak

em vez de copiar o arquivo. E pronto, funcionou! db2.bakrestaurado com sucesso.

Suspeito que alguns outros problemas com a leitura do arquivo de backup possam ser relatados erroneamente como 5(Access is denied.)no MS SQL.

ps_ttf
fonte
0

No linux, fui para a /var/opt/mssql/data/pasta e abri um terminal sudo, alterei minhas permissões de arquivo * .mdf e * .ldf conforme abaixo, nas quais você substitui yourDBpelo nome do arquivo do banco de dados e myUserpelo nome de usuário atualmente registrado:

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

Depois disso, foi reconectado sem nenhum problema.

muhammad tayyab
fonte
0

Isso significa que o usuário de login do SSMS não tem permissão no arquivo .mdf. É assim que funcionou para mim:

Eu tinha aberto o SSMS (Executar como administrador) e logado como usuário administrador, banco de dados clique com o botão direito do mouse em anexar, clique em adicionar, selecione o arquivo .mdf, clique em OK. Feito.

Peixinho
fonte