web-dev-qa-db-fra.com

Comment ajouter sysadmin à l'utilisateur dans SQL Server 2008 lorsqu'il n'existe aucun compte sysadmin

J'ai une instance de SQL Server 2008 en cours d'exécution. Malheureusement, lors des tests, j'ai désélectionné les droits sysadmin pour ma connexion et je ne peux plus le lire (car je n'ai pas de droits sysadmin).

Il n'y a aucun autre compte administrateur système pour l'instance à l'exception de SA.

J'ai été configuré uniquement pour l'authentification Windows, j'ai donc piraté le LoginMode dans le registre à 2 pour pouvoir me connecter en tant que SA en utilisant l'authentification SQL. Cela définit en effet le mode de connexion sur Mixte, cependant le = SA l'utilisateur est désactivé par défaut et je ne peux pas le réactiver car je n'ai pas de droits d'administrateur système.

Comment puis-je activer la connexion SA pour pouvoir entrer et réaffecter le sysadmin à mon compte normal? Y a-t-il un paramètre de registre pour cela aussi ou est-il stocké dans la base de données master?

25
Mark D Jackson

Même l'option de connexion la plus uber-admin Connexion administrateur dédié ( DAC ), qui ne peut être utilisée que comme connexion locale et vous permet d'annuler toutes sortes du mal, nécessite toujours des informations d'identification. Je ne pense donc pas qu'il existe une manière officielle de procéder.

Le moyen le plus rapide de ressusciter ce système peut être d'arrêter SQL Server, de copier les fichiers de la base de données des utilisateurs dans un endroit sûr, de les désinstaller, de les réinstaller (en veillant à ce que le service pack atteigne au moins le niveau auquel vous étiez auparavant), de recopier les fichiers et de les joindre les bases de données. (Pas sûr que la copie vers l'extérieur/vers l'arrière soit nécessaire, mais juste pour être sûr ...).

Vous devrez toujours récupérer manuellement les objets de niveau serveur (par exemple, les connexions)

11

Il existe une véritable porte dérobée dans SQL Server qui ne nécessite aucun redémarrage et/ou redémarrage de quoi que ce soit en mode mono-utilisateur. J'ai fait cela sur des systèmes auxquels je n'avais pas accès mais dont j'avais besoin de vérifier des trucs.

Téléchargez les outils PSexec depuis ici . Placez-le sur le serveur, puis dans une invite de commande, exécutez cette commande: psexec -i -s SSMS.exe ou sqlwb.exe

Cela ouvrira SSMS en tant que compte système disposant d'un accès sysadmin à l'instance de SQL Server. Cela se fait lors de l'installation de SQL Server, mais j'ai entendu dire que ce ne sera pas le cas avec SQL 2012.

27
user507

SQL Server 2008 est différent de SQL Server 2005, en ce sens que les administrateurs locaux n'héritent plus du rôle de serveur fixe sysadmin.

Lorsque SQL Server 2008 est installé, il vous invite à désigner un compte à ajouter au rôle sysadmin. Cependant, si vous recevez la boîte après l'installation du logiciel, cela ne vous aide pas beaucoup.

Heureusement, Microsoft a conservé la fonctionnalité 2005 lorsque SQL Server s'exécute en mode mono-utilisateur. Voici ce que vous faites:

  • connectez-vous au serveur en tant qu'administrateur local Windows
  • arrêter le serveur SQL
  • à l'invite de commande, dans le répertoire où réside sqlservr.exe, tapez sqlservr.exe -m et appuyez sur Entrée - cela démarrera SQL Server en mode mono-utilisateur
  • ouvrir SQL Server EM et ajouter votre compte au rôle de serveur fixe sysadmin
  • arrêter le serveur SQL, redémarrer (en ligne de commande ou dans SQL Server EM
14
Brian Sullivan

C'est une excellente question et quelqu'un sera dans cette situation et a besoin d'être secouru.

Tout le crédit revient à codykonior

Si vous êtes un administrateur Windows sur le serveur , vous pouvez utiliser un script PowerShell v2 pour obtenir un accès sans interruption et sans risque connu. Il le fait en dupliquant le jeton de connexion du service SQL Server même s'il s'exécute sous un compte de service AD, un compte virtuel ou protégé avec un SID par service

Le script ci-dessous itérera les services SQL Server et vous ajoutera au rôle sysadmin partout où vous manquerez:

#GITHUB Link : https://github.com/codykonior/HackSql
$userName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

$services = Get-Service | Where { ($_.Name -eq 'MSSQLSERVER' -or $_.Name -like 'MSSQL$*') -and $_.Status -eq "Running" }
foreach ($service in $services) {
    if ($service.Name -eq "MSSQLSERVER") {
        $sqlName = ".\"
    } else {
        $sqlName = ".\$($service.Name.Substring(6))"
    }

    Write-Host "Attempting $sqlName"
    $serviceProcess = Get-WmiObject -Class Win32_Service -Filter "Name = '$($service.Name)'"

    Invoke-TokenManipulation -ProcessId $serviceProcess.ProcessID -ImpersonateUser | Out-Null
    $impersonatedUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
    Write-Host "Service $($service.Name) on PID $($serviceProcess.ProcessID) will connect to $sqlName as $impersonatedUser"

    $sqlConnection = New-Object System.Data.SqlClient.SqlConnection("Data Source=$sqlName;Trusted_Connection=True")
    $sqlConnection.Open()
    $sqlCommand = New-Object System.Data.SqlClient.SqlCommand("If Not Exists (Select Top 1 0 From sys.server_principals Where name = '$userName')
Begin
    Create Login [$userName] From Windows
End

If Not Exists (Select Top 1 0 From master.sys.server_principals sp Join master.sys.server_role_members srp On sp.principal_id = srp.member_principal_id Join master.sys.server_principals spr On srp.role_principal_id = spr.principal_id Where sp.name = '$userName' And spr.name = 'sysadmin')
Begin
    Exec sp_addsrvrolemember '$userName', 'sysadmin'
End", $sqlConnection)
    $sqlCommand.ExecuteNonQuery() | Out-Null
    $sqlConnection.Close()
    Invoke-TokenManipulation -RevToSelf | Out-Null
}
5
Kin Shah

Vous pouvez toujours créer une connexion avec un accès 'sysadmin'. Merci à Principal Data Engineer chez Microsoft (Saleem Hakani) avait écrit les conseils et astuces SQL Server ci-dessous.

J'ai trouvé cela alors que j'étais coincé dans un état similaire lorsque j'ai oublié le mot de passe sa pour ma machine de test.

Lien: https://blogs.technet.Microsoft.com/sqlman/2011/06/14/tips-tricks-you-have-lost-access-to-sql-server-now-what/ =

Voici les étapes que vous devrez effectuer:

  1. Démarrez l'instance SQL Server en mode mono-utilisateur (ou configuration minimale qui mettra également SQL Server en mode mono-utilisateur)

À partir de l'invite de commandes, tapez: SQLServr.Exe –m (ou SQLServr.exe –f)

Remarque: Si le dossier Binn ne se trouve pas dans votre chemin d'accès à l'environnement, vous devrez accéder au dossier Binn.

(Habituellement, le dossier Binn se trouve dans: C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn)

  1. Une fois que le service SQL Server a été démarré en mode mono-utilisateur ou avec une configuration minimale, vous pouvez maintenant utiliser la commande SQLCMD à partir de l'invite de commandes pour vous connecter à SQL Server et effectuer les opérations suivantes pour vous ajouter en tant qu'administrateur sur l'instance SQL Server.

SQLCMD –S

Vous serez maintenant connecté à SQL Server en tant qu'administrateur.

  1. Une fois que vous êtes connecté à SQL Server à l'aide de SQLCMD, exécutez les commandes suivantes pour créer un nouveau compte ou ajouter une connexion existante au rôle serveur SYSADMIN.

Pour créer une nouvelle connexion et ajouter cette connexion au rôle serveur SYSADMIN:

1> CRÉER UNE CONNEXION ‘’ avec MOT DE PASSE = ’’

2> allez

1> SP_ADDSRVROLEMEMBER ‘’, ’SYSADMIN’

2> allez

Pour ajouter une connexion existante au rôle serveur SYSADMIN, exécutez ce qui suit:

1> SP_ADDSRVROLEMEMBER ‘’, ’SYSADMIN’

L'opération ci-dessus se chargera d'accorder les privilèges SYSADMIN à une connexion existante ou à une nouvelle connexion.

  1. Une fois les étapes ci-dessus exécutées avec succès, l'étape suivante consiste à arrêter et à démarrer les services SQL Server à l'aide des options de démarrage normales. (Cette fois, vous n'aurez pas besoin de –f ou –m)
2
Ramakant Dadhichi

Vous pouvez faire la suivante:
1) Créez un compte d'utilisateur Windows avec des privilèges administratifs
2) Connectez-vous dans Windows avec le nouveau compte administratif
3) Ouvrez Sql Server Mangement Studio à l'aide de l'authentification Windows
4) Vous êtes maintenant connecté à SQL Server en tant que sysadmin, vous pouvez donc créer de nouveaux comptes ou mettre à jour l'utilisateur sa

0