GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie ändern Sie direkt die Systemkataloge in SQL Server 2017?

!! LESEN SIE UNBEDINGT DIE FETT GEDRUCKTE WARNUNG UNTEN !!

Die Serverkonfigurationsoption von allow updates wurde ab SQL Server 2005 nicht mehr funktionsfähig gemacht. Die Dokumentation gibt an, dass es keinen Fehler verursacht, aber keine direkten Aktualisierungen von Systemkatalogtabellen zulässt.

Der einzige Weg, dies jetzt zu erreichen, ist SICH VOLLSTÄNDIG BEWUSST ZU SEIN, DASS DIES GEFÄHRLICH IST UND NICHT EMPFOHLEN , besteht darin, eine DAC-Verbindung (Dedicated Admin Console) zu verwenden.

Zuerst benötigen Sie das tatsächliche Tabellenname, den Sie aktualisieren möchten. Der Name, den Sie SELECT from ist nur eine Systemkatalogansicht, nicht die eigentliche Tabelle. Normalerweise verwende ich Folgendes:

EXEC sp_helptext N'sys.{some name here}';

Gehen Sie dann wie folgt vor:

  1. Starten Sie die Instanz im Single-User-Modus mit

    neu
    sudo systemctl stop mssql-server
    sudo -u mssql /opt/mssql/bin/sqlservr -m
    

    Nur um es klar zu sagen:Dieser Schritt dient dazu, Systemkatalogaktualisierungen zu ermöglichen. Die Verbindung mit dem DAC selbst für andere Vorgänge erfordert keinen Einzelbenutzermodus.

  2. Stellen Sie eine Verbindung über eine dedizierte Admin-Konsolenverbindung mit sa her oder ein anderer sysadmin Anmeldung. Sie können dies in einer interaktiven SQLCMD-Sitzung tun, indem Sie Folgendes in einem Eingabeaufforderungsfenster ausführen:

    sqlcmd -S admin:localhost -U sa
    

    Wenn Linux SQLCMD dies aus irgendeinem Grund nicht unterstützt, können Sie Remote-DAC-Verbindungen aktivieren und später einen Windows-Computer verwenden, um herauszufinden, ob DAC funktioniert. Sie können DAC unter Linux aktivieren mit,:

    EXEC sp_configure 'remote admin connections', 1;  
    RECONFIGURE;  
    
  3. Versuchen Sie in dieser DB etwa Folgendes:

    UPDATE sys.{whatever_name_you_found} {enter}
    SET [some_column] = {some_value} {enter}
    WHERE [some_other_column] = {the_better_be_correct_or_else_ID}; {enter}
    GO {enter}
    

    Die Anweisung wird erst ausgeführt, wenn Sie GO {enter} eingeben .

GEFAHR WIRD ROBINSON!!

Bitte seien Sie vorsichtig, wenn Sie Systemkatalogtabellen direkt bearbeiten, und fühlen Sie sich nicht zu wohl mit der Idee, dies zu tun. Dies ist etwas, was nur getan werden sollte wenn es absolut keine andere Möglichkeit gibt, ein Problem zu beheben (wie hier der Fall). Es gibt wahrscheinlich mehrere Gründe, direkte Bearbeitungen zu vermeiden, aber die beiden, die zuerst in den Sinn kommen, sind:

  • Ähnlich wie bei den Datenmodellen, die wir erstellen, gibt es wahrscheinlich Regeln und Arbeitsabläufe für die Funktionsweise von Dingen, die wir nicht kennen (z. B. Denormalisierung, "Geschäftsregeln", die den Status von Daten in verschiedenen Tabellen regeln usw.)
  • Sehr wahrscheinlich führt das direkte Bearbeiten dazu, dass Microsoft nicht mehr verpflichtet ist, Ihnen zu helfen, wenn Sie auf Probleme stoßen und einen Supportvertrag haben (ich habe die Bedingungen der Supportvereinbarung(en) nicht gesehen, aber es fällt mir schwer zu glauben, dass eine solche Sprache nicht enthalten wäre dort).

    @Paul Randal bestätigte in einem Kommentar:„Das manuelle Bearbeiten einer Systemtabelle setzt unwiderruflich ein Flag in der Boot-Seite der Datenbank, das Ihre Datenbank als auf diese Weise bearbeitet markiert, und CSS könnte entscheiden, Ihnen nicht zu helfen, wenn Sie später Probleme haben mit dieser Datenbank."


Kurze Antwort:Tust du nicht.

Längere Antwort:Beachten Sie, dass Sie dies niemals auf einem Produktionssystem tun sollten . Sie können und werden die Dinge wahrscheinlich ziemlich durcheinander bringen, und MS wird Ihnen sagen, dass Sie Sand zerstampfen sollen, wenn Sie sie anrufen und um Hilfe bitten, mit all Ihrem nicht unterstützten/undokumentierten Herumspielen.

Wenn das aus dem Weg ist, los geht's.

Zuerst müssen Sie SQL Server im Einzelbenutzermodus starten. Sie haben die Frage „Linux“ markiert, und ich weiß nicht, ob dies genau so funktioniert, aber für die Windows-Version stoppen Sie einfach den SQL Server-Dienst und starten Sie ihn dann über die Befehlszeile mit „-m“. Argument, z. B.:

cd "\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn"
sqlservr.exe -m

Sobald dies ausgeführt wird, müssen Sie sich mit der dedizierten Administratorverbindung (DAC) für die Instanz verbinden. Sie können jedes beliebige Tool verwenden, z. Management Studio oder sqlcmd, aber beachten Sie, dass Sie den Objekt-Explorer nicht in Management Studio verbinden können, da er im Einzelbenutzermodus ausgeführt wird. Geben Sie in beiden Fällen ADMIN: an Präfix für den Servernamen. Ich denke, Sie können ADMIN:(local) machen um sich mit einer lokalen Standardinstanz zu verbinden.

Danach können Sie so ziemlich alles ändern, was Sie möchten, aber Sie müssen herausfinden, was die tatsächlichen zugrunde liegenden Tabellen für bestimmte Systemkatalogansichten sind. Beispiel:sys.database_principals . Um die Ansichtsdefinition anzuzeigen, wechseln Sie zur Datenbank „mssqlsystemresource“ (normalerweise nicht sichtbar) und verwenden Sie sp_helptext um den Code für Systemansichten/-prozeduren/-funktionen anzuzeigen.

USE mssqlsystemresource
GO
EXEC sp_helptext 'sys.server_principals'

Sie werden feststellen, dass eine der Tabellen, auf die diese Ansicht verweist, master.sys.sysxlgns ist , was wahrscheinlich ein guter Anfang ist. Sie finden eine Spalte namens pwdhash in dieser Tabelle, die die gehashten Passwörter zu speichern scheint.

Wenn Sie mit dem Basteln fertig sind, gehen Sie einfach zu Ihrem Befehlsfenster, in dem SQL Server im Einzelbenutzermodus ausgeführt wird, und drücken Sie Strg-C, um es zu beenden.

Denken Sie daran, tun Sie dies niemals auf einem Produktionssystem, es sei denn, der Microsoft-Support hat Ihnen ausdrückliche Anweisungen gegeben . Ansonsten viel Spaß und stellen Sie sicher, dass Sie Backups haben, wenn Sie die Instanz zerstören!


Linux
  1. So ändern Sie die Identität eines Linux-Systems

  2. Wie führe ich einen Befehl als Systemadministrator (root) aus?

  3. Wie finde ich alle Subversion-Repositories auf dem System?

  4. Wie ändere ich das Standard-Hintergrundbild des Systems?

  5. Wie starte ich den Tomcat-Server unter Linux?

So ändern Sie die Standard-Shell im Linux-System

So ändern Sie die Proxmox-Repositories

So laden Sie ein ISO-Image auf den Proxmox-Server hoch

So verwenden Sie den fd-Befehl auf einem Linux-System

So ändern Sie den Server-Hostnamen in Ubuntu

Wie ändere ich die Zeitzone auf Ubuntu 18.04 Server?