GNU/Linux >> Linux Esercitazione >  >> Linux

Come si modificano direttamente i cataloghi di sistema in SQL Server 2017?

!! ASSICURARSI DI LEGGERE L'AVVERTENZA, IN GRASSETTO, IN FONDO !!

L'opzione di configurazione del server di allow updates è stato reso non funzionante a partire da SQL Server 2005. La documentazione afferma che non genera errori, ma in realtà non consente alcun aggiornamento diretto alle tabelle del catalogo di sistema.

L'unico modo per raggiungere questo obiettivo adesso, ESSERE COMPLETAMENTE CONSAPEVOLI CHE QUESTO È PERICOLOSO E CHE NON È CONSIGLIATO , consiste nell'utilizzare una connessione alla console di amministrazione dedicata (DAC).

Per prima cosa avrai bisogno dell'effettivo Nome della tabella che desideri aggiornare. Il nome che hai SELECT from è solo una vista del catalogo di sistema, non la vera tabella. Di solito uso quanto segue:

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

Quindi, procedi come segue:

  1. Riavvia l'istanza in modalità utente singolo con

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

    Giusto per essere chiari:questo passaggio serve per consentire gli aggiornamenti del catalogo di sistema. La connessione al DAC stesso per eseguire altre operazioni non richiede la modalità utente singolo.

  2. Connettiti tramite connessione alla console di amministrazione dedicata con sa o qualche altro sysadmin Login. Puoi farlo in una sessione interattiva di SQLCMD eseguendo quanto segue in una finestra del prompt dei comandi:

    sqlcmd -S admin:localhost -U sa
    

    Se Linux SQLCMD non lo supporta per qualche motivo, è possibile abilitare le connessioni DAC remote e successivamente utilizzare una macchina Windows per verificare che DAC funzioni. Puoi abilitare DAC su Linux con,:

    EXEC sp_configure 'remote admin connections', 1;  
    RECONFIGURE;  
    
  3. In quel DB, prova qualcosa di simile al seguente:

    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}
    

    Non eseguirà l'istruzione finché non inserisci GO {enter} .

PERICOLO ROBINSON!!

Si prega di fare attenzione quando si modificano direttamente le tabelle del catalogo di sistema e non sentirsi troppo a proprio agio con l'idea di farlo. Questo è qualcosa che dovrebbe essere fatto solo se non c'è assolutamente altro modo per risolvere un problema (come nel caso qui). Ci sono probabilmente diversi motivi per evitare di apportare modifiche dirette, ma i due che mi vengono in mente inizialmente sono:

  • Proprio come i modelli di dati che creiamo, ci sono probabilmente regole e flussi di lavoro per il funzionamento delle cose di cui non siamo a conoscenza (ad es. denormalizzazione, regole "aziendali" che regolano lo stato dei dati su varie tabelle, ecc.)
  • È molto probabile che apportare modifiche dirette annulli la responsabilità di Microsoft di assisterti se riscontri problemi e hai un contratto di supporto (non ho visto i termini degli accordi di supporto, ma ho difficoltà a credere che tale linguaggio non sarebbe in là).

    @Paul Randal ha confermato in un commento:"la modifica manuale di una tabella di sistema imposta irrevocabilmente un flag nella pagina di avvio del database che contrassegna il tuo database come modificato in questo modo e il CSS potrebbe decidere di non aiutarti se successivamente hai problemi con quel database."


Risposta breve:non lo fai.

Risposta più lunga:tieni presente che non dovresti mai farlo su un sistema di produzione . Puoi e probabilmente rovinerai le cose piuttosto male, e MS ti dirà di battere la sabbia se li chiami chiedendo aiuto con tutti i tuoi pasticci non supportati / non documentati.

Detto questo, eccoci qui.

Innanzitutto, dovrai attivare SQL Server in modalità utente singolo. Hai contrassegnato la domanda "linux" e non so se funziona esattamente allo stesso modo, ma per la versione Windows, basta arrestare il servizio SQL Server, quindi avviarlo dalla riga di comando con "-m" argomento, ad esempio:

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

Una volta che è in esecuzione, devi connetterti alla connessione dell'amministratore dedicato (DAC) per l'istanza. Puoi usare qualsiasi strumento che ti piace, ad es. Management Studio o sqlcmd, ma tieni presente che non puoi connettere Esplora oggetti in Management Studio, poiché è in esecuzione in modalità utente singolo. In entrambi i casi, specifica ADMIN: prefisso per il nome del server. Penso che tu possa fare ADMIN:(local) per connettersi a un'istanza predefinita locale.

Successivamente, puoi praticamente cambiare ciò che desideri, ma dovrai capire quali sono le tabelle sottostanti effettive per determinate viste del catalogo di sistema. Ad esempio, sys.database_principals . Per vedere la definizione della vista, passa al database "mssqlsystemresource" (normalmente non visibile) e usa sp_helptext per vedere il codice per tutte le viste/procedure/funzioni di sistema.

USE mssqlsystemresource
GO
EXEC sp_helptext 'sys.server_principals'

Noterai che una delle tabelle a cui questa vista fa riferimento è master.sys.sysxlgns , che è probabilmente un buon punto di partenza. Troverai una colonna chiamata pwdhash in questa tabella, che sembra memorizzare le password con hash.

Quando hai finito di armeggiare, vai alla finestra di comando che esegue SQL Server in modalità utente singolo e premi Ctrl-C per spegnerlo.

Ricorda, non farlo mai su un sistema di produzione, a meno che il supporto Microsoft non ti abbia fornito istruzioni specifiche in caso contrario . A parte questo, divertiti e assicurati di avere i backup per quando distruggi l'istanza!


Linux
  1. Come cambiare l'identità di un sistema Linux

  2. Come configurare un server KVM in modo rapido

  3. Come individuare tutti i repository di Subversion sul sistema?

  4. Come modificare l'immagine di sfondo predefinita del sistema?

  5. come si imposta la password dell'amministratore su openldap 2.4

Come modificare la shell predefinita nel sistema Linux

Come modificare i repository Proxmox

Come caricare un'immagine ISO sul server Proxmox

Come utilizzare il comando fd sul sistema Linux

Come modificare il nome host del server in Ubuntu

Come modificare il fuso orario su Ubuntu 18.04 Server?