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?
quelle
Antworten:
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
quelle
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
quelle
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 enthielten
SQLServerMSSQLUser$<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:
quelle
Fügen Sie dem Ordner, in dem Ihre
.mdf
Datei befindet .Überprüfen Sie diesen Namen:
NT Service\MSSQLSERVER
Und ändern Sie den
Location
in Ihren Servernamen.quelle
SELECT servicename, service_account FROM sys.dm_server_services
.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.)
quelle
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
quelle
Eine SQL2005-Datenbank kann in Windows 7 folgendermaßen angehängt werden:
Und dann angehängte Datenbank erfolgreich abgeschlossen.
quelle
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.quelle
SELECT servicename, service_account FROM sys.dm_server_services
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!
quelle
Der
sa
Benutzer verwendet NTFS-KontenSQLServerMSSQLUser$<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
sa
Benutzer haben, aber ich hoffe, es hilft.quelle
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
quelle
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 .
quelle
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.
quelle
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.)
quelle
Für das, was es für jeden wert ist, der die besondere Variation dieses Problems hat, die ich hatte:
Ü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:
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.
quelle
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.
quelle
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?
quelle
Windows authenticated user
, um die Berechtigung für Datenbankdateien zu überwinden. (In diesem Fall MS SQLServer-Instanz auf der Festplatte mit Windows-Betriebssystem).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.
quelle
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
Die obige Methode hat mir geholfen, das Problem zu beheben.
quelle
Ich habe diese Seite gelesen und sie haben dort einen interessanten Satz:
Natürlich haben sie auch Folgendes:
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.
quelle
Wechseln Sie zu FOR ATTACH -> FOR ATTACH_FORCE_REBUILD_LOG
quelle
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.
quelle
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:
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
In meinem Fall löste das Problem Folgendes:
quelle
Kopieren Sie die Datenbank in einen anderen Ordner und hängen Sie SQLServer mit "Windows-Authentifizierung" an oder melden Sie sich an.
quelle
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.
quelle