Der Zugriff wird beim Anhängen einer Datenbank verweigert

146

Ich verwende die SQL Server 2008 Developer Edition. Ich habe versucht, die AdventureWorks2008-Datenbank anzuhängen.

Beim Versuch, eine Verbindung herzustellen, wurde der Fehler "Zugriff verweigert" angezeigt. Laut Ereignisprotokoll stammte es aus dem Betriebssystem:

Öffnen fehlgeschlagen: Datei D: \ ProjectData \ AdventureWorks \ AdventureWorksLT2008_Data.mdf für Dateinummer 0 konnte nicht geöffnet werden. Betriebssystemfehler: 5 (Zugriff verweigert.).

Ich dachte "NTFS-Problem", aber System (und ich) haben modifizierten Zugriff auf beide Dateien.

Ich habe festgestellt, dass ich die Datenbank erfolgreich anhängen kann, wenn ich mich als sa anmelde, aber mein Benutzerkonto funktioniert nicht.

Ich bin Mitglied der lokalen Administratorgruppe auf meinem Computer und habe die Rolle des Systemadministrators in der SQL Server-Instanz.

Irgendeine Idee, warum ich als sa angemeldet sein musste?

JMarsch
quelle
Ist die MDF-Datei zufällig verschlüsselt?
Brettski
Nein - die wahre Neugier für mich ist, dass es gut funktioniert, wenn ich mich als sa anmelde (mit Management Studio), aber es funktioniert nicht, wenn ich mein lokales Administratorkonto verwende. Mein Konto ist ein Administrator, ein Domänenadministrator, und es ist das Konto, unter dem ich bei der Installation von SQL Server angemeldet war (während des Setups gab es eine Option, mein aktuelles Konto zu einem Systemadministrator zu machen, und ich tat dies).
JMarsch
1
So funktioniert UAC in W7, keine Überraschung.
Al Kepp
@AlKepp Nein - keine UAC-Sache. Nur das Anmelden als sa behebt (SQL Server-Konto, hat nichts mit UAC zu tun) das Problem. Wenn ich nur Mitglied der lokalen Administratorgruppe bin, erhalte ich meine Berechtigungen. Ich muss nicht erhöhen, damit meine AD-Anmeldeinformationen funktionieren.
JMarsch

Antworten:

162

Führen Sie SQL Server Management Studio als Administrator aus. (Rechtsklick-> Als Administrator ausführen), der sich um die ganze Verrücktheit in meinem Fall gekümmert hat.

SQL SRV EXPRESS 2008 R2. Windows 7

MandoMando
quelle
5
Das Ausführen von Management Studio als Administrator hat bei mir NICHT funktioniert. Dieser Fehler tritt auf, wenn versucht wird, den Windows-Dienst zu starten.
Nuzzolilo
9
Das Ausführen als Administrator ist der erste Schritt. Der zweite Schritt ist die Protokollierung bei SQL Server durch Windows-Authentifizierung. (Diese Methode hat bei mir funktioniert!)
Furkan Ekinci
3
Hat auch für mich gearbeitet. Kann nicht in Worten ausdrücken, wie anstrengend und frustrierend die Eingabeaufforderungen und Fehler unter Windows sind. Ich bin ein Administrator!
David Masters
Hat auch für mich gearbeitet. Anfangs dachte ich nicht, dass es funktionieren würde, da SSMS nur ein UI-Client ist. Ich dachte, der Dienst muss als Administrator ausgeführt werden. Es reicht jedoch aus, SSMS als Administrator auszuführen.
Luke Vo
2
Hat auch für mich gearbeitet. SQL Server 2019, SSMS 18.4
Ryan Thomas
104

Vielen Dank für alle Kommentare. Einige von Ihnen haben mir geholfen, die Antwort zu finden. Folgendes habe ich gefunden:

Es war ein NTFS-Berechtigungsproblem und kein SQL-Problem. Außerdem sieht es irgendwie fehlerhaft aus (und es ist wiederholbar).

Das Problem: Das von mir verwendete Konto verfügte über vollständige NTFS-Berechtigungen für die Dateien mdf und ldf. Diese Berechtigungen wurden jedoch über die Gruppenmitgliedschaft erteilt (die Gruppe "Lokale Administratoren" hatte Berechtigungen, und mein Konto ist Mitglied lokaler Administratoren). (Ich habe die Berechtigungen überprüft)

Wenn ich versuche, das Anhängen durchzuführen, stellen Sie eine Verbindung zu SQL Server wie ich her (wo ich mich in der Gruppe der Administratoren befinde). Dies schlägt mit dem NTFS-Problem fehl.

Wenn ich jedoch die gleichen Dateiberechtigungen erteile, die die lokale Administratorgruppe direkt für mein Domänenkonto hat, kann ich problemlos eine Verbindung herstellen.

(Oh, und ja, ich habe die lokalen Gruppen auf diesem Computer überprüft und festgestellt, dass mein Domänenkonto tatsächlich Mitglied der lokalen Administratorgruppe ist.)

Es sieht also so aus, als ob der Fehler auftritt, weil ein Code (entweder in SQL Server oder in Management Studio) nach den Berechtigungen sucht, die das Benutzerkonto besitzt, aber nicht so weit geht, die Gruppenberechtigungen zu überprüfen, die das Benutzerkonto erbt.

Das klingt für mich komisch, aber ich kann es immer wieder reproduzieren, also bin ich zu dem Schluss gekommen, dass es die Antwort ist.

Update: Ich habe dies als Fehler gemeldet: https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited

JMarsch
quelle
104
Wenn Sie wie ich Windows 7 verwenden, müssen Sie SQL Server Management Studio als Administrator ausführen, um diesen Fehler zu vermeiden.
Antony
4
Wiedergabe unter Win7 Pro mit SS2008 Express. Gleiches Problem für sqlcmd und SSMS. == Meldung '5120', Ebene '16', Status '101', Server 'DAGO \ SQLEXPRESS', Zeile 1 - 'Die zuständige Datei' D: \ data \ mssql \ drei.mdf 'kann nicht gehört werden. Fehlerfehler 5: '5 (Zugriff besorgt) == Die Gewährung des vollständigen Zugriffs auf den Benutzer (der Mitglied der lokalen Administratorgruppe ist, die Zugriff hat) behebt das Problem. Außerdem führt das Ausführen von sqlcmd (oder SSMS, denke ich) als Administrator nicht zu diesem Fehler.
Lumi
1
Anthony Highsky hat die Antwort. Sie müssen nur sicherstellen, dass Management Studio als Administrator ausgeführt wird.
James
Das gleiche Problem und die gleiche Lösung für mich. 2008R2, Win 7 usw. Ich habe mich gerade explizit zur Sicherheitsliste hinzugefügt, und es hat funktioniert. Ich nehme an, dass SQL Server sie lesen kann, sobald sie angehängt sind, aber nicht unter meinen Anmeldeinformationen beim Anhängen.
Andrew Backer
4
Das Ausführen von Management Studio als Administrator hat bei mir NICHT funktioniert. Dieser Fehler tritt auf, wenn versucht wird, den Windows-Dienst zu starten.
Nuzzolilo
20

Ich möchte den geposteten Antworten zusätzliche Informationen hinzufügen.

Seien Sie vorsichtig, wenn Sie die Datenbank trennen, da der Windows-Benutzer, bei dem Sie angemeldet sind, der einzige Benutzer ist, der über Berechtigungen für die MDF-Datei verfügt! Die ursprünglichen Berechtigungen der MDF-Datei, die den Benutzer enthieltenSQLServerMSSQLUser$<computer_name>$<instance_name> und das Administratorkonto , werden von dem Windows-Benutzer überschrieben, als den Sie angemeldet sind (nicht vom SQL Server-Benutzer). Boom, alle Berechtigungen sind einfach so weg. Machen Sie es wie andere gesagt und klicken Sie mit der rechten Maustaste auf Ihre MDF-Datei und überprüfen Sie die Berechtigungen.

Ich bin auf dieses Problem gestoßen, weil ich SSMS verwendet habe, um eine Verbindung zur Datenbank herzustellen (egal welches SQL-Serverkonto), und die Datenbank getrennt habe. Danach war mein Windows-Benutzer der einzige, der über Berechtigungen für die MDF-Datei verfügte. Als ich später versuchte, die Datenbank über das sa-Konto anzuhängen, wurde der Fehler "Zugriff verweigert" ausgegeben.

Um die ursprünglichen Berechtigungen beizubehalten, sollten Sie die Datenbank offline schalten, dann trennen und in der folgenden Reihenfolge anhängen:

USE [master]
GO
-- kick all users out of the db
ALTER DATABASE mydb
SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO

-- Take the Database Offline
ALTER DATABASE mydb SET OFFLINE WITH
ROLLBACK IMMEDIATE
GO

-- detach the db
EXEC master.dbo.sp_detach_db @dbname = N'mydb'
GO
goku_da_master
quelle
1
Danke dafür! Ich denke, es ist viel einfacher, es richtig zu machen, wenn Sie auch mit einem SQL Server-authentifizierten Konto mit Serveradministratorrechten angemeldet sind.
William Rose
Leider hilft mir das nicht, wenn ich die Datenbank ursprünglich als 'sa' anstatt als Windows-Benutzer erstellt habe
David Gardiner
"Seien Sie vorsichtig beim Trennen der Datenbank". Sagen Sie SSMS, dass es vorsichtig sein soll. Meine Probleme traten auf, weil bei Verwendung von SSMS der Befehl "Datenbank kopieren" fehlschlug und mich ohne Erklärung in der Schachtstadt
Alan Macdonald,
18

Fügen Sie dem Ordner, in dem Ihre .mdf Datei befindet .

Überprüfen Sie diesen Namen: NT Service\MSSQLSERVER

Und ändern Sie den Locationin Ihren Servernamen.

Leonardo
quelle
5
Führen Sie Folgendes aus, um den genauen Kontonamen zu ermitteln, da dieser von Instanz zu Instanz variieren kann : SELECT servicename, service_account FROM sys.dm_server_services.
Arve Systad
13

Dieses Problem wird durch die Benutzerkontensteuerung (UAC) verursacht, nicht wahr? Obwohl Ihr Benutzerkonto Mitglied der Gruppe Administratoren ist, können Sie in der Benutzerkontensteuerung in Windows 7 keine Administratoraufgaben ausführen, es sei denn, Sie führen Programme "als Administrator" aus. Es ist kein wirklicher Fehler in SQL Server oder Management Studio oder was auch immer. (Obwohl es möglicherweise das Problem kennen und Sie um erhöhte Berechtigungen bitten könnte, anstatt sich nur über "Fehler 5" zu beschweren.)

Al Kepp
quelle
11

Führen Sie SQL Server Management Studio als Administrator aus. (Rechtsklick-> Als Administrator ausführen) funktionierte für mich mit Windows 7 - SQL Server 2008 R2

Rolwin Crasta
quelle
1
Diese Antwort sollte positiv bewertet werden. Das Ausführen des SSMS als Administrator ist eine Problemumgehung, die diese Antwort repliziert. Microsoft meldet dies hier als "erwartetes Verhalten": link
FreeText
Ist das nicht dasselbe wie MandoMandos Antwort?
Mortb
10

Eine SQL2005-Datenbank kann in Windows 7 folgendermaßen angehängt werden:

start menu >
 all program >
  Microsoft sql server 2005 >
   sql server management studio >
    right click >
     run as administrator >
      click ok

Und dann angehängte Datenbank erfolgreich abgeschlossen.

Rahul garg aggarwal
quelle
Das funktionierte mit SQL Server 2016 mit Management Studio 2008 R2 auf Windows 10 :)
Par
9

Wenn Sie sich als sa(oder ein beliebiges SQL Server-Konto) anmelden , fungieren Sie als SQL Server-Dienstkonto. Wenn Sie als Sie angemeldet sind, verfügen Sie über die Berechtigungen Ihres Kontos. Aus irgendeinem Grund haben Sie nicht den entsprechenden Dateizugriff, das Dienstkonto jedoch.

Nick Craver
quelle
Das NTFS-Problem war das erste, was ich mir auch gedacht habe, aber das scheint nicht das Problem zu sein: Ich bin Mitglied der lokalen Administratorgruppe und habe überprüft, ob Administratoren über die Berechtigung "Vollzugriff" für die MDF- und LDF-Dateien verfügen . Außerdem bin ich der Eigentümer der Dateien - ich hatte gerade ein Verzeichnis erstellt und die mdf / ldf-Dateien selbst an ihren Speicherort kopiert.
JMarsch
@JMarsch: @Nick sagt, dass 'sa' eine Reihe von SQLSERVER-RECHTEN hat - keine NTFS-Rechte - die Ihr Konto nicht hat.
Trevoke
@ Trevoke: Ich bin bei dir. Wenn dies der Fall ist, welche Rechte müsste ich dann meinem Benutzerkonto zuweisen? (Ich bin bereits der Sysadmin-Rolle zugeordnet)
JMarsch
1
Alte Antwort, dies, aber für Leute wie mich vor fünf Minuten: Sie können den genauen Dienstbenutzernamen finden, indem SieSELECT servicename, service_account FROM sys.dm_server_services
Arve Systad
6

Ich habe diese Lösung gefunden: Klicken Sie mit der rechten Maustaste auf den Ordner, in dem Sie Ihre MDF-Datei speichern -> klicken Sie auf Eigenschaften -> wählen Sie die Registerkarte Sicherheit, klicken Sie auf Bearbeiten ... und geben Sie ihm die volle Kontrolle. Hoffe das hilft!

Quokka
quelle
5

Der saBenutzer verwendet NTFS-Konten SQLServerMSSQLUser$<computer_name>$<instance_name>undSQLServerSQLAgentUser$<computer_name>$<instance_name> greift auf die Datenbankdateien zu. Möglicherweise möchten Sie versuchen, Berechtigungen für einen oder beide dieser Benutzer hinzuzufügen.

Ich weiß nicht, ob Ihr Problem gelöst ist, da Sie sagen, dass Sie keine Probleme mit dem saBenutzer haben, aber ich hoffe, es hilft.

djeidot
quelle
5

Bei mir - Wird in Fenster 8 ausgeführt - Klicken Sie mit der rechten Maustaste auf SQL Server Manager Studio -> Mit Administrator ausführen. -> keine Probleme anhängen

Grauer Wolf
quelle
5

Es kann einfach, aber radikal behoben werden. Gehen Sie einfach zu dem Ordner, in dem Sie die MDF-Datei gespeichert haben . Wählen Sie Datei-> Rechtsklick -> Klicken Sie auf Eigenschaften und erteilen Sie der Datei die vollständigen Berechtigungen für die Sicherheit des angemeldeten Benutzers .

Ema.H
quelle
3

Jedes Mal, wenn ich auf dieses Problem gestoßen bin, wurde versucht, eine Datenbank anzuhängen, die sich in einem anderen Verzeichnis als dem in SQL Server eingerichteten Standarddatenbankverzeichnis befindet.

Ich würde dringend empfehlen, dass Sie Ihre Datendatei einfach in das Verzeichnis verschieben, das der SQL Server erwartet, anstatt sie mit Berechtigungen für verschiedene Verzeichnisse und Konten zu versehen.

Nicht ich
quelle
In vielen Situationen stimme ich Ihrem Standpunkt zu, aber mit SQL Server möchten Sie häufig in der Lage sein, Ihre Datenbanken aus Gründen der Skalierbarkeit auf verschiedenen Spindeln oder Volumes zu lokalisieren. Tatsächlich ist es üblich, das Transaktionsprotokoll auf einer von der Datenbank getrennten Spindel abzulegen, um den Transaktionsdurchsatz zu verbessern.
JMarsch
@JMarsch: Ja. Die Verzeichnisse können tatsächlich über die Registerkarte Servereigenschaften> Datenbankeinstellungen für Standarddaten und Protokollspeicherorte
konfiguriert werden.
Das deckt Standardeinstellungen ab, aber das sind nur Standardeinstellungen. Es ist völlig akzeptabel, dbs an anderer Stelle zu platzieren, und das ist nicht einmal ungewöhnlich, wenn Ihr Server mehr als eine aktiv verwendete Datenbank verwaltet.
JMarsch
Ich habe das gleiche Problem auch mit dem Standard-SQL Server-Verzeichnis: c: \ Programme \ Microsoft SQL Server \ MSSQL10_50.SPATIAL_IM \ MSSQL \ DATA \ mydb.mdf unter win7.
goku_da_master
3

Ich wollte nur diese Informationen hinzufügen.

http://www.mssqltips.com/sqlservertip/2528/database-attach-failure-in-sql-server-2008-r2/

Lösung

Sie erhalten diesen Fehler, weil zwei verschiedene Anmeldungen die Trenn- und Anhängevorgänge ausgeführt haben. Wenn die Dateien getrennt wurden, gehörten sie der ersten Anmeldung, aber das Anhängen schlug fehl, da die verwendete Anmeldung nicht der Eigentümer der MDF- und LDF-Dateien war.

Wenn wir Datenbankdateien trennen, wird der Eigentümer zur Person, die den Befehl zum Trennen ausgeführt hat. Um das Problem zu beheben, müssen wir die andere Anmeldung als Eigentümer der MDF- und LDF-Dateien ändern oder hinzufügen.

Klicken Sie mit der rechten Maustaste auf die Datei "filename.mdf" und wählen Sie Eigenschaften aus, um die Berechtigungen der MDF-Datei zu überprüfen. Hier sehen wir, dass nur ein Konto die Berechtigung für die Datei "filename.mdf" hat, da dies das Konto war, mit dem die Datenbank getrennt wurde.

Um dieses Problem zu beheben, klicken Sie auf die Schaltfläche Hinzufügen ..., um den anderen oder einen anderen erforderlichen Login hinzuzufügen und dem Login die volle Kontrolle zu geben. Sie sollten dies auch für die "ldf" -Datei tun. Wenn Sie diese Aufgabe abgeschlossen haben, klicken Sie auf die Schaltfläche OK. (Hinweis: Für andere Betriebssystemversionen haben Sie möglicherweise die Option Bearbeiten. Klicken Sie zuerst auf diese Option. Anschließend wird die Option Hinzufügen ... angezeigt.)

Stormwild
quelle
Ich habe meine Verbindung in SSMS geändert, um sie an den Benutzer anzupassen, der das Trennen durchgeführt hat, und ich konnte das Anhängen durchführen.
Glitzsfa
2

Für das, was es für jeden wert ist, der die besondere Variation dieses Problems hat, die ich hatte:

  • SQL Express 2008
  • Visual Studio 2010 Premium

Über das Kontextmenü des Ordners App_data hatte ich eine SQL Express-Datenbank für Debugging-Zwecke erstellt. Die Verbindungszeichenfolge (von NHibernate verwendet) war wie folgt:

Server=.\SQLExpress;
AttachDbFilename=|DataDirectory|DebugDatabase.mdf;
Database=DebugDatabase;
Trusted_Connection=Yes;

Dies gab mir den gleichen Fehler "Zugriff verweigert" in der Datenbankdatei. Ich habe versucht, verschiedenen Benutzern die volle Kontrolle über den Ordner und die Dateien zu geben, an einem Punkt sogar "Jeder". Da nichts geholfen hat, habe ich die hinzugefügten Berechtigungen wieder entfernt.

Die endgültige Lösung bestand darin , den Server-Explorer in Visual Studio zu öffnen, eine Verbindung zum MDF herzustellen und ihn erneut zu trennen. Nachdem ich das getan hatte, konnte meine Web-App problemlos auf die Datenbank zugreifen.

PS. Credits gehen an diesen Blog-Beitrag, den ich beim Googeln dieses speziellen Problems gefunden habe, und lösen die Idee aus, die Datenbank anzuhängen / zu trennen, um das Problem zu lösen.

Jeroen
quelle
2

Ich habe eine Datenbank-MDF aus dem Standard-Datenordner in meinen asp.net-Ordner app_data verschoben und bin auf dieses Problem gestoßen, als ich versucht habe, die Datenbank wieder online zu stellen.

Ich habe die Sicherheitseinstellungen der anderen Dateidatenbanken am ursprünglichen Speicherort mit den verschobenen Dateien verglichen und festgestellt, dass MSSQL $ SQLEXPRESS den Dateien an ihrem neuen Speicherort keine Berechtigungen zugewiesen wurden. Ich habe Vollzugriff für "NT SERVICE \ MSSQL $ SQLEXPRESS" hinzugefügt (muss diesen NT SERVICE enthalten) und es wurde einwandfrei angehängt.

Es scheint, dass der ursprüngliche Datenordner über diese Berechtigungen verfügt und die Dateien diese erben. Verschieben Sie die Dateien und die Vererbungsunterbrechungen natürlich.

Ich habe die MDF-Datei eines anderen Projekts überprüft, die ich direkt im Ordner app_data erstellt habe. Es verfügt nicht über MSSQL $ SQLEXPRESS-Berechtigungen. Hmmm. Ich frage mich, warum SQL Express das eine mag, das andere aber nicht.

Brad Mathews
quelle
Diese Lösung funktionierte für mich unter Windows 10 und SQL Server 2017 beim Verschieben einer Protokolldatei auf eine separate Festplatte. In meinem Fall war der Benutzername "NT SERVICE \ MSSQLSERVER"
John Hanley
1

Dies klingt nach NTFS-Berechtigungen. Dies bedeutet normalerweise, dass Ihr SQL Server-Dienstkonto nur Lesezugriff auf die Datei hat (beachten Sie, dass SQL Server unabhängig von Ihrer Anmeldung dasselbe Dienstkonto für den Zugriff auf Datenbankdateien verwendet). Sind Sie sicher, dass Sie die Ordnerberechtigungen zwischen der Anmeldung als Sie selbst und der Anmeldung als sa nicht geändert haben? Wenn Sie sich trennen und es erneut versuchen, hat es immer noch das gleiche Problem?

Adrian O'Connor
quelle
In meinem Fall nein - ich habe es mehrere Male wiederholt, um sicherzugehen. Das Problem war, dass mein Konto nur über eine Indirektionsebene Zugriff auf die Dateien hatte - ich war Mitglied der Gruppe Domain Admin. Der Domänenadministrator war Mitglied der Gruppe "Lokale Administratoren" auf dem Computer, und die lokalen Administratoren (und das System) hatten die volle Kontrolle über den Ordner. (Es gab also 2 Ebenen der Gruppenindirektion). Wenn ich mir selbst direkt Berechtigungen zugewiesen habe, hat es funktioniert. Wenn ich sie entfernt habe, konnte ich die Dateien weiterhin aus Explorere usw. kopieren / löschen, aber SQL Server konnte sie nicht laden.
JMarsch
Wenn Sie versuchen, eine Datenbank anzuhängen. Melden Sie sich an Windows authenticated user, um die Berechtigung für Datenbankdateien zu überwinden. (In diesem Fall MS SQLServer-Instanz auf der Festplatte mit Windows-Betriebssystem).
Do Nhu Vy
1

Ich hatte das gleiche Problem beim Anhängen einer Datenbank. Es war kein SQL-Problem, sondern ein Kontoproblem. Gehen Sie zur Bedienfeldsteuerung / Einstellungen zur Benutzerkontensteuerung / Stellen Sie "Nie benachrichtigen" ein. Zum Schluss starten Sie den Computer neu und es hat bei mir funktioniert.

Paola
quelle
1

Ich habe die MDF-Datei angehängt, indem ich mit der rechten Maustaste auf die Datenbank geklickt und die Protokolldatei AdventureWorks2012_Data_log.ldf im Assistenten entfernt habe. Die MDF-Datei wurde am folgenden Speicherort abgelegt

    C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

Die obige Methode hat mir geholfen, das Problem zu beheben.

praveen
quelle
1

Ich habe diese Seite gelesen und sie haben dort einen interessanten Satz:

Achtung: Seien Sie sehr wählerisch, wenn Sie Benutzer zu diesen Rollen hinzufügen. Beispielsweise wird sysadmin in jeder Datenbank dbo zugeordnet und entspricht der Anmeldung mit dem sa-Konto.

Natürlich haben sie auch Folgendes:

Berechtigungen, die Benutzern und Rollen erteilt werden und datenbankspezifisch sind. Alle Berechtigungen sind kumulativ mit Ausnahme einer VERWEIGERUNG. Eine verweigerte Berechtigung auf Benutzerebene oder auf Rollenebene überschreibt dieselbe Berechtigung, die über andere Rollenmitgliedschaften erteilt wurde, mit Ausnahme der festen Serverrolle sysadmin. (Ein Systemadministrator behält alle Berechtigungen, auch wenn eine Rolle, in der er Mitglied ist, die Berechtigung VERWEIGERN hat.)

Wenn Sie also ein Domänenadministrator und Mitglied der SQL-Gruppe "sysadmin" sind, sollte die Welt Ihr Krebstier sein.

Laut Microsoft sollten Sie sich diese beiden Seiten natürlich kurz ansehen:
Link zu Datenbankvoraussetzungen

Link zum Installieren von Datenbanken

Sie sind ungezogen und versuchen, sie manuell anzuhängen :) Im Ernst, haben Sie alle Voraussetzungen für die AdventureWorks2008-Datenbank?
Ich vermute, dass dies nur ein weiterer Fall von Microsoft ist, aber ich könnte mich irren.

Trevoke
quelle
+1, weil Ihr Kommentar mir geholfen hat, die Antwort zu finden. Ich werde meine Ergebnisse in diesem Thread veröffentlichen. Übrigens (ich war "ungezogen" aufgrund sehr seltsamer Richtlinien, in denen ich arbeite - die Adventureworks-Datenbank wird als Exe verteilt. Ich kann keine Exes herunterladen. (Ich kann Zip-Dateien und MSI-Dateien herunterladen, daher sehe ich sie nicht Wie die Exe-Filterung wirklich etwas anderes bewirkt, als sich in die Quere zu kommen, aber das sind die Regeln. Wie auch immer, ich könnte die rohen MDF-Dateien als Zips von Codeplex bekommen, und da bin ich auf diese kleine Neugier
gestoßen
1

Geben Sie hier die Bildbeschreibung ein

USE [master]
GO
CREATE DATABASE [DataBasename] ON 
( FILENAME = N'C:\data\DataBasename.mdf' )
 FOR ATTACH
GO

Wechseln Sie zu FOR ATTACH -> FOR ATTACH_FORCE_REBUILD_LOG

USE [master]
GO
CREATE DATABASE [DataBasename] ON 
( FILENAME = N'C:\data\DataBasename.mdf' )
 FOR ATTACH_FORCE_REBUILD_LOG
GO
Valentin Petkov
quelle
Danke, du hast meinen Tag gerettet
Shahrokhian
1

Ich habe diesen Fehler als sa bekommen. In meinem Fall spielte die Datenbanksicherheit keine Rolle. Ich habe allen die volle Kontrolle zu den MDF- und LDF-Dateien hinzugefügt, und das Anhängen verlief einwandfrei.

toddmo
quelle
1

Ich hatte in VS 2019 das gleiche Problem. Wenn jemand immer noch das gleiche Problem hat, stellen Sie bitte sicher, dass Sie folgende Dinge haben / tun:

  1. Auf Ihrem m / c sollte SQL Express installiert sein
  2. Sollte SSDT in VS (in VS 2019 - überprüfen Sie diese Komponente während der Installation) für frühere Versionen installiert sein, müssen Sie diese Komponente extern hinzufügen
  3. Fügen Sie Ihrer Verbindungszeichenfolge 'User Instance = True' hinzu
  4. Ich denke, es ist optional - öffnen Sie VS und SQL Express im Verwaltungsmodus und melden Sie sich als Administrator bei SQL Express an
Ashu_90
quelle
0

Es handelt sich tatsächlich um NTFS-Berechtigungen und einen seltsamen Fehler in SQL Server. Ich bin nicht sicher, ob der obige Fehlerbericht korrekt ist oder auf einen zusätzlichen Fehler verweist.

Um dies unter Windows 7 zu beheben, habe ich SQL Server Management Studio normal ausgeführt (nicht als Administrator). Ich habe dann versucht, die MDF-Datei anzuhängen. Dabei habe ich die Benutzeroberfläche verwendet, anstatt sie in den Pfad einzufügen. Ich bemerkte, dass der Weg von mir abgeschnitten war. Dies liegt daran, dass der Benutzer MS SQL Server (SQLServerMSSQLUser $ machinename $ SQLEXPRESS), den die Software für Sie hinzufügt, keine Berechtigung zum Zugriff auf den Ordner hat (in diesem Fall einen Ordner tief in meinen eigenen Benutzerordnern).

Das Einfügen des Pfads und das Fortfahren führen zu dem obigen Fehler. Also - Ich habe dem MS SQL Server-Benutzer die Berechtigung zum Lesen ab dem ersten Verzeichnis erteilt, aus dem er verweigert wurde (mein Benutzerordner). Ich habe dann die Weitergabeoperation sofort abgebrochen, da dies eine Ewigkeit dauern kann, und erneut Leseberechtigungen auf den nächsten erforderlichen Unterordner angewendet und diese vollständig weitergeben lassen.

Schließlich erteilte ich dem MS SQL Server-Benutzer die Berechtigung "Ändern" für die Dateien ".mdf" und ".ldf" für die Datenbank.

Ich kann jetzt an die Datenbankdateien anhängen.

Chris Moschini
quelle
0

Wenn Sie SQL Server 2012 ausführen, können Sie diesen Fehler erhalten, indem Sie versuchen, eine ältere Version einer MDF-Datei anzuhängen. Ex eine MDF-Datei von SQL Server 2008.

Erik Forsmyr
quelle
Ich denke, dieser Teil war relativ selbsterklärend. Es wäre gut zu wissen, wie man es regelt.
Dansan
0

Ich habe das Problem gelöst, indem ich einfach die .mdf-Datei, die Sie an den öffentlichen Ordner anhängen möchten, in meinen Fall in den Ordner users / public verschoben habe. Dann befestige ich es von dort ohne Probleme. Hoffe das hilft.

databaseUser
quelle
0

Für diejenigen, die das Problem mit den anderen Lösungen hier nicht beheben konnten, hat die folgende Lösung für mich funktioniert:

Wechseln Sie in Ihrer SQL Server-Installation zu Ihrem Ordner "DATA", klicken Sie mit der rechten Maustaste auf die Registerkarte "Eigenschaften" und "Sicherheit", und fügen Sie dem Benutzer "NETWORK SERVICE" Vollzugriffsberechtigungen hinzu.

http://decoding.wordpress.com/2008/08/25/sql-server-2005-expess-how-to-fix-error-3417/

(Der obige Link ist für SQL 2005, aber dies hat eine SQL 2008 R2-Installation für mich behoben.)

Einige zusätzliche Informationen: Dieses Problem trat bei mir auf, nachdem ich eine sekundäre Festplatte ausgetauscht hatte (auf der sich die SQL-Installation befand). Ich habe alle Dateien kopiert und den ursprünglichen Laufwerksbuchstaben auf der neuen Festplatte wiederhergestellt. Die Sicherheitsberechtigungen wurden jedoch nicht kopiert. Ich denke, dass ich beim nächsten Mal eine bessere Methode zum Kopieren von Daten verwenden werde.

Nuzzolilo
quelle
0

In meinem Fall löste das Problem Folgendes:

USE [master]
GO
CREATE DATABASE [AdventureWorks2008R2] ON
( FILENAME = 'C:\Program Files\Microsfot SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\AdventureWors2008R2_Data.mdf')
FOR ATTACH_REBUILD_LOG
Nick_
quelle
0

Kopieren Sie die Datenbank in einen anderen Ordner und hängen Sie SQLServer mit "Windows-Authentifizierung" an oder melden Sie sich an.

Geben Sie hier die Bildbeschreibung ein

Chưa biết
quelle
0

Ich hatte das gleiche Problem beim erneuten Anhängen der Datenbank, nachdem ich sie getrennt und ldf- und mdf-Dateien von Laufwerk C nach F verschoben hatte.

Um das Problem zu beheben, musste ich beiden Dateien das Prinzip OWNER RIGHTS hinzufügen und es auf der Registerkarte Sicherheit des Dialogfelds Eigenschaften vollständig steuern.

Kunst
quelle