Πώς συνδέομαι στον SQL Server όταν δεν μπορώ να συνδεθώ με άλλον τρόπο (DAC, lost password, missing sysadmin)
- Πώς συλλέγουμε to actual execution plan από τα queries με χρήση Extended Event και πως διαβάζουμε τα δεδομένα του - 2 Δεκέμβριος 2024
- Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle - 1 Νοέμβριος 2024
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
Κάποιες φορές θα μας τύχει να μην μπορούμε να συνδεθούμε στο SQL Server Instance ούτε ακόμα και σαν sysadmin χρήστης, είτε λόγο προβλήματος στο instance, είτε καθώς έχουμε ξεχάσει τον κωδικό του sysadmin χρήστη είτε δεν έχουμε / γνωρίζουμε sysadmin χρήστη .
Σαν λύση για το πρώτο η Microsoft από την έκδοση SQL Server 2008 και έπειτα προσφέρει το εργαλέιο DAC (Diagnostic Connection for Database Administrators). Αυτό μας επιτρέπει να συνδεθούμε σχεδόν κάθε φορά στο instance ακόμα και στις πιο ακραίες συνθήκες.
Σαν λύση για το δεύτερο και το τρίτο θα δούμε πώς συνδεόμαστε σε Single User mode χωρίς να έχουμε χρήστη στο SQL Server instance.
Πότε μας είναι χρήσιμο το DAC
Το χρησιμοποιούμε όταν δεν έχουμε πρόσβαση στη βάση με κάνεναν λογαριασμό είτε με SQL Authentication είτε Windows Authentication. Επίσης κάποιες πολύ εξειδικευμένες εργασίες επιτρέπονται από τον SQL Server μόνο αν είμαστε συνδεδεμένοι μέσω DAC.
Τι περιορισμούς έχουμε με το DAC
Με τη χρήση του πρέπει να θυμόμαστε ότι έχουμε το εξείς περιορισμούς:
- Μπορεί να συνθεθεί μόνο χρήστης sysadmin και μάλιστα μόνο ένας ταυτόχρονα.
- Δεν εκτελούνται οι ενέργειες με παραλληλία.
- Τα queries μέσω DAC εκτελούνται με περιορισμένα resources.
Πώς το ενεργοποιούμε το DAC και για απομακρυσμένη πρόσβαση
Μπορούμε να συνδεθούμε και απομακρυσμένα από άλλον υπολογιστή αρκεί να έχουμε πρόσβαση στη πόρτα 1434 που χρησιμοποιεί και να είναι ενεργοποιημένη η παράμετρος remote admin connections:
exec sp_configure 'remote admin connections', 1; go reconfigure go
Πώς συνδεόμαστε μέσω SQLCMD στο DAC
Το μόνο διαφορετικό που έχουμε να κάνουμε σε σχέση με ένα κανονικό connection είναι να προσθέσουμε την παράμετρο -A
. Ο λογαριασμός που θα συνδεθούμε πρέπει να είναι sysadmin:
sqlcmd /S SMATZOURANISLP\SQL19 /d db_test -Usqladmin -Ppassword -A
Πώς συνδεόμαστε μέσω SSMS στο DAC
Για να συνδεθούμε μέσω SQL Server Management Studio (SSMS) το μόνο που έχουμε να κάνουμε είναι να προσθέσουμε μπροστά από το servername το κείμενο admin:
:
Αν μας εμφανίσει αυτό το κείμενο σημαίνει ότι προσπαθήσαμε να συνδεθούμε από object explorer:
Για να συνθεδούμε χωρίς αυτό το μύνημα λάθους πρέπει να συνδεθούμε από File — New — Database Engine Query:
Πώς βλέπουμε αν υπάρχει χρήστης συνδεδεμένος με DAC
Για να βρούμε εύκολα ποιος χρήστης είναι συνδεδεμένος μέσω DAC και δεν μας επιτρέπεται να μπούμε, τρέχουμε το κάτωθι query:
select t.name,ec.* from sys.dm_exec_connections ec inner join sys.tcp_endpoints t on ec.endpoint_id=t.endpoint_id where t.name='Dedicated Admin Connection';
Δεν μπορώ ακόμα να συνδεθώ, τι να δοκιμάσω;
Σε περίπτωσουμε που ακόμα και με DAC δεν μπορούμε να συνδεθούμε, μπορούμε να δοκιμάσουμε να ξεκινήσουμε το SQL Server Service σε Minimal Configuration Single User Mode.
Σε αυτή την λειτουργία ο SQL Server δεν δημιουργεί την tempdb, η απομακρισμένη πρόσβαση δεν επιτρέπεται, μπορεί να συνδεθεί ταυτόχρονα μόνο ένας χρήστης και ενεργοποιούνται μόνο οι απαραίτητες διαδικασίες.
Το μόνο που έχουμε να κάνουμε είναι να πάμε στον SQL Server Configuration Manager, να κάνουμε δεξί κλικ Properties στο SQL Server Service και στην καρτέλα Startup Parameters να προσθέσουμε την παράμετρο -f
(δεν ξεχνάμε να την αφαιρέσουμε και να κάνουμε επανεκκίνηση το service όταν λύσουμε το πρόβλημα). Αφού ολοκληρώσουμε την διαδικασία απαιτείται restart του SQL Server Service.
Όταν ολοκληρωθεί το restart δοκιμάζουμε να συνδεθούμε είτε με sqlcmd είτε με SQL Server Management Studio.
Στην περίπτωση όμως που πάλι δεν μπορέσουμε να συνδεθούμε με το παρακάτω σφάλμα:
Login Failed for user A. Reason: Server is in single user mode. Only one administrator can connect at this time (Microsoft SQL Server, Error: 18461)
Σημαίνει ότι με το που ξεκινάει το instance συνδέεται κάποιος άλλος χρήστης οπότε σε αυτή την περίπτωση ξεκινάμε από Command Prompt το instance σε Single User Mode χωρίς minimal configuration -m
με επιλογή να μπορείς να συνδέεσαι μόνο μέσα από sqlcmd:
net stop MSSQLSERVER net start MSSQLSERVER /mSQLCMD
και μπορούμε να συνδεθούμε:
sqlcmd /S MSSQLSERVER -Usqladmin -Ppassword
Σε περίπτωση που έχουμε ξεχάσει τον κωδικό των SQL Logins με sysadmin και δεν έχουμε / γνωρίζουμε Windows Logins με sysadmin
Σε Single User Mode όλοι οι χρήστες που είναι local admins στον server παίρνουν τον ρόλο του sysadmin και μπορούν να συνδεθούν στο SQL Server Instance, οπότε μπορούμε να συνδεθούμε με το παρακάτω (με την προϋπόθεση ότι έχουμε εκκινήσει το instance με /mSQLCMD
που είδαμε στο προηγούμενο βήμα) :
sqlcmd -S MSSQLSERVER -E
Σε περίπτωση που έχουμε ένα default instance συνδεόμαστε και με το παρακάτω χωρίς να δηλώσουμε instance:
sqlcmd -S. -E
Έπειτα αναλόγος την περίπτωση, μπορούμε είτε να αλλάξουμε credentials σε έναν χρήστη είτε να φτιάξουμε έναν καινούργιο και να του δώσουμε τον ρόλο του sysadmin
:
create login dba with password ='123Pa#123'; alter server role sysadmin add member dba; go
Όταν ολοκληρώσουμε την διαδικασία μπορούμε να κάνουμε απενεκκίνηση το SQL Server instance σε κανονική λειτουργία:
net stop MSSQLSERVER net start MSSQLSERVER