J'ai installé SQL Server 2008 R2 sur mon ordinateur local. Mais, je ne peux pas créer de nouvelle base de données à cause de droits (ou d’absence de).
"CRÉER LA PERMISSION DE LA BASE DE DONNÉES REFUSÉE"
Alors, j'ai essayé d'attribuer les privilèges d'administrateur à mon login actuel
"L'utilisateur n'a pas la permission d'effectuer cette action."
J'ai aussi essayé de créer un nouveau login qui aurait des privilèges d'administrateur mais sans succès. Comment puis-je m'accorder des droits d'administrateur pour pouvoir créer une base de données? Je peux le réinstaller, mais je préfère ne pas le faire.
Oui, il semble que vous ayez oublié de vous ajouter au rôle sysadmin lors de l'installation de SQL Server. Si vous êtes un administrateur local sur votre ordinateur, this blog post peut vous aider à utiliser SQLCMD pour obtenir votre compte dans le groupe sysadmin de SQL Server sans avoir à le réinstaller. C'est un peu un trou de sécurité dans SQL Server, si vous me le demandez, mais cela vous aidera dans ce cas.
Ouvrez une fenêtre d'invite de commande. Si une instance par défaut de SQL Server est déjà en cours d'exécution, exécutez la commande suivante sur la commande Invite pour arrêter le service SQL Server:
net stop mssqlserver
Maintenant, allez dans le répertoire où le serveur SQL est installé. Le répertoire peut par exemple être l'un de ceux-ci:
C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn
Déterminez votre répertoire MSSQL et CD
comme tel:
CD C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn
Exécutez maintenant la commande suivante pour démarrer SQL Server en mode mono-utilisateur. Comme SQLCMD
est spécifié, une seule connexion SQLCMD
peut être établie (à partir d'une autre fenêtre d'invite de commande).
sqlservr -m"SQLCMD"
Ouvrez maintenant une autre fenêtre d'invite de commande avec le même utilisateur que celui qui a démarré SQL Server en mode utilisateur unique ci-dessus et exécutez-la:
sqlcmd
Et appuyez sur Entrée. Vous pouvez maintenant exécuter des instructions SQL sur l'instance SQL Server s'exécutant en mode mono-utilisateur:
create login [<<DOMAIN\USERNAME>>] from windows;
-- For older versions of SQL Server:
EXEC sys.sp_addsrvrolemember @loginame = N'<<DOMAIN\USERNAME>>', @rolename = N'sysadmin';
-- For newer versions of SQL Server:
ALTER SERVER ROLE [sysadmin] ADD MEMBER [<<DOMAIN\USERNAME>>];
GO
Source .
UPDATED N'oubliez pas un point-virgule après ALTER SERVER ROLE [sysadmin] ADD MEMBER [<<DOMAIN\USERNAME>>];
et ne ajoutez pas de point-virgule supplémentaire après GO
, sinon la commande ne sera jamais exécutée.
J'ai adopté une base de données SQL 2012 sur laquelle je n'étais pas administrateur système, mais administrateur de la machine. J'ai utilisé SSMS avec "Exécuter en tant qu'administrateur", ajouté mon compte NT en tant que connexion SQL et défini le rôle de serveur sur sysadmin. Aucun problème.
Voici un script qui prétend pouvoir résoudre ce problème.
Obtenez les droits d'administrateur sur votre SQL Server Express local avec ce script simple
Télécharger le lien vers le script
La description
Ce script de commande vous permet de vous ajouter facilement au rôle sysadmin d'une instance locale SQL Server. Vous devez être membre du groupe Administrateurs local Windows ou avoir accès aux informations d'identification d'un utilisateur. Le script prend en charge SQL Server 2005 et versions ultérieures.
Le script est particulièrement utile si vous êtes un développeur qui essaie d’utiliser SQL Server 2008 Express qui a été installé par un tiers. Dans cette situation, vous ne disposez généralement pas de droits d'administrateur sur l'instance SQL Server 2008 Express, car par défaut, seule la personne qui installe SQL Server 2008 dispose des privilèges d'administration.
L'utilisateur qui a installé SQL Server 2008 Express peut utiliser SQL Server Management Studio pour vous accorder les privilèges nécessaires. Mais que se passe-t-il si SQL Server Management Studio n’est pas installé? Ou pire si l'utilisateur qui installe n'est plus disponible?
Ce script corrige le problème en quelques clics!
Remarque: Vous devrez fournir au fichier BAT un "Nom d'instance" (probablement "MSSQLSERVER", mais ce n'est peut-être pas le cas): vous pouvez obtenir la valeur en exécutant d'abord les opérations suivantes dans la "Console de gestion Microsoft SQL Server" ":
SELECT @@servicename
Ensuite, copiez le résultat à utiliser lorsque le fichier BAT demande "Nom d'instance SQL".
@echo off
rem
rem ****************************************************************************
rem
rem Copyright (c) Microsoft Corporation. All rights reserved.
rem This code is licensed under the Microsoft Public License.
rem THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
rem ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
rem IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
rem PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
rem
rem ****************************************************************************
rem
rem CMD script to add a user to the SQL Server sysadmin role
rem
rem Input: %1 specifies the instance name to be modified. Defaults to SQLEXPRESS.
rem %2 specifies the principal identity to be added (in the form "<domain>\<user>").
rem If omitted, the script will request elevation and add the current user (pre-elevation) to the sysadmin role.
rem If provided explicitly, the script is assumed to be running elevated already.
rem
rem Method: 1) restart the SQL service with the '-m' option, which allows a single connection from a box admin
rem (the box admin is temporarily added to the sysadmin role with this start option)
rem 2) connect to the SQL instance and add the user to the sysadmin role
rem 3) restart the SQL service for normal connections
rem
rem Output: Messages indicating success/failure.
rem Note that if elevation is done by this script, a new command process window is created: the output of this
rem window is not directly accessible to the caller.
rem
rem
setlocal
set sqlresult=N/A
if .%1 == . (set /P sqlinstance=Enter SQL instance name, or default to SQLEXPRESS: ) else (set sqlinstance=%1)
if .%sqlinstance% == . (set sqlinstance=SQLEXPRESS)
if /I %sqlinstance% == MSSQLSERVER (set sqlservice=MSSQLSERVER) else (set sqlservice=MSSQL$%sqlinstance%)
if .%2 == . (set sqllogin="%USERDOMAIN%\%USERNAME%") else (set sqllogin=%2)
rem remove enclosing quotes
for %%i in (%sqllogin%) do set sqllogin=%%~i
@echo Adding '%sqllogin%' to the 'sysadmin' role on SQL Server instance '%sqlinstance%'.
@echo Verify the '%sqlservice%' service exists ...
set srvstate=0
for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j
if .%srvstate% == .0 goto existerror
rem
rem elevate if <domain/user> was defaulted
rem
if NOT .%2 == . goto continue
echo new ActiveXObject("Shell.Application").ShellExecute("cmd.exe", "/D /Q /C pushd \""+WScript.Arguments(0)+"\" & \""+WScript.Arguments(1)+"\" %sqlinstance% \""+WScript.Arguments(2)+"\"", "", "runas"); >"%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js"
call "%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js" "%cd%" %0 "%sqllogin%"
del "%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js"
goto :EOF
:continue
rem
rem determine if the SQL service is running
rem
set srvstarted=0
set srvstate=0
for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j
if .%srvstate% == .0 goto queryerror
rem
rem if required, stop the SQL service
rem
if .%srvstate% == .1 goto startm
set srvstarted=1
@echo Stop the '%sqlservice%' service ...
net stop %sqlservice%
if errorlevel 1 goto stoperror
:startm
rem
rem start the SQL service with the '-m' option (single admin connection) and wait until its STATE is '4' (STARTED)
rem also use trace flags as follows:
rem 3659 - log all errors to errorlog
rem 4010 - enable shared memory only (lpc:)
rem 4022 - do not start autoprocs
rem
@echo Start the '%sqlservice%' service in maintenance mode ...
sc start %sqlservice% -m -T3659 -T4010 -T4022 >nul
if errorlevel 1 goto startmerror
:checkstate1
set srvstate=0
for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j
if .%srvstate% == .0 goto queryerror
if .%srvstate% == .1 goto startmerror
if NOT .%srvstate% == .4 goto checkstate1
rem
rem add the specified user to the sysadmin role
rem access tempdb to avoid a misleading shutdown error
rem
@echo Add '%sqllogin%' to the 'sysadmin' role ...
for /F "usebackq tokens=1,3" %%i in (`sqlcmd -S np:\\.\pipe\SQLLocal\%sqlinstance% -E -Q "create table #foo (bar int); declare @rc int; execute @rc = sp_addsrvrolemember '$(sqllogin)', 'sysadmin'; print 'RETURN_CODE : '+CAST(@rc as char)"`) do if .%%i == .RETURN_CODE set sqlresult=%%j
rem
rem stop the SQL service
rem
@echo Stop the '%sqlservice%' service ...
net stop %sqlservice%
if errorlevel 1 goto stoperror
if .%srvstarted% == .0 goto exit
rem
rem start the SQL service for normal connections
rem
net start %sqlservice%
if errorlevel 1 goto starterror
goto exit
rem
rem handle unexpected errors
rem
:existerror
sc query %sqlservice%
@echo '%sqlservice%' service is invalid
goto exit
:queryerror
@echo 'sc query %sqlservice%' failed
goto exit
:stoperror
@echo 'net stop %sqlservice%' failed
goto exit
:startmerror
@echo 'sc start %sqlservice% -m' failed
goto exit
:starterror
@echo 'net start %sqlservice%' failed
goto exit
:exit
if .%sqlresult% == .0 (@echo '%sqllogin%' was successfully added to the 'sysadmin' role.) else (@echo '%sqllogin%' was NOT added to the 'sysadmin' role: SQL return code is %sqlresult%.)
endlocal
pause
Microsoft a publié un article sur ce problème. Tout se passe étape par étape.
En bref, il s'agit de démarrer l'instance de sqlserver avec -m
comme le suggèrent toutes les autres réponses. Cependant, Microsoft fournit des instructions légèrement plus détaillées.
Sur la page de démarrage, démarrez SQL Server Management Studio. Dans le menu Affichage, sélectionnez Serveurs inscrits. (Si votre serveur n'est pas encore enregistré, cliquez avec le bouton droit sur Groupes de serveurs locaux, pointez sur Tâches, puis cliquez sur Enregistrer les serveurs locaux.)
Dans la zone Serveurs enregistrés, cliquez avec le bouton droit sur votre serveur, puis cliquez sur Gestionnaire de configuration SQL Server. Cela devrait vous demander l'autorisation de s'exécuter en tant qu'administrateur, puis ouvrez le programme Configuration Manager.
Fermer le studio de gestion.
Dans le volet de gauche du Gestionnaire de configuration SQL Server, sélectionnez Services SQL Server. Dans le volet de droite, recherchez votre instance de SQL Server. (L'instance par défaut de SQL Server inclut (MSSQLSERVER) après le nom de l'ordinateur. Les instances nommées apparaissent en majuscule avec le même nom que dans Serveurs enregistrés.) Cliquez avec le bouton droit de la souris sur l'instance de SQL Server, puis cliquez sur Propriétés.
Sous l'onglet Paramètres de démarrage, dans la zone Spécifiez un paramètre de démarrage, tapez -m, puis cliquez sur Ajouter. (C'est un tiret puis la lettre minuscule m.)
Remarque
Pour certaines versions antérieures de SQL Server, il n'y a pas d'onglet Paramètres de démarrage. Dans ce cas, sous l'onglet Avancé, double-cliquez sur Paramètres de démarrage. Les paramètres s'ouvrent dans une très petite fenêtre. Veillez à ne modifier aucun des paramètres existants. A la toute fin, ajoutez un nouveau paramètre; -m puis cliquez sur OK. (C'est un point-virgule puis un tiret puis une lettre minuscule m.)
Cliquez sur OK, puis après le message de redémarrage, cliquez avec le bouton droit sur le nom de votre serveur, puis cliquez sur Redémarrer.
Après le redémarrage de SQL Server, votre serveur sera en mode mono-utilisateur. Assurez-vous que cet agent SQL Server n'est pas en cours d'exécution. Si démarré, cela prendra votre seule connexion.
Sur l'écran de démarrage de Windows 8, cliquez avec le bouton droit sur l'icône de Management Studio. Au bas de l'écran, sélectionnez Exécuter en tant qu'administrateur. (Cela transmettra vos informations d'identification d'administrateur à SSMS.)
Remarque
Pour les versions antérieures de Windows, l'option Exécuter en tant qu'administrateur apparaît sous la forme d'un sous-menu.
Dans certaines configurations, SSMS tentera d’établir plusieurs connexions. Plusieurs connexions vont échouer car SQL Server est en mode mono-utilisateur. Vous pouvez sélectionner l'une des actions suivantes à effectuer. Effectuez l'une des actions suivantes.
a) Connectez-vous avec l'explorateur d'objets à l'aide de l'authentification Windows (qui comprend vos informations d'identification d'administrateur). Développez Sécurité, développez Connexions et double-cliquez sur votre propre connexion. Sur la page Rôles du serveur, sélectionnez sysadmin, puis cliquez sur OK.
b) Au lieu de vous connecter à l'Explorateur d'objets, connectez-vous avec une fenêtre de requête à l'aide de l'authentification Windows (qui comprend vos informations d'identification d'administrateur). (Vous ne pouvez vous connecter de cette manière que si vous ne vous êtes pas connecté avec l'explorateur d'objets.) Exécutez le code suivant pour ajouter une nouvelle connexion d'authentification Windows membre du rôle de serveur fixe sysadmin. L'exemple suivant ajoute un utilisateur de domaine nommé CONTOSO\PatK.
CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];
c) Si votre serveur SQL s'exécute en mode d'authentification mixte, connectez-vous avec une fenêtre de requête à l'aide de l'authentification Windows (qui comprend vos informations d'identification d'administrateur). Exécutez le code tel que suivant pour créer une nouvelle connexion d’authentification SQL Server membre du rôle de serveur fixe sysadmin.
CREATE LOGIN TempLogin WITH PASSWORD = '************'; ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;
Attention:
Remplacez ************ par un mot de passe fort.
d) Si votre SQL Server s'exécute en mode d'authentification mixte et que vous souhaitez réinitialiser le mot de passe du compte sa, connectez-vous à une fenêtre de requête à l'aide de l'authentification Windows (qui comprend vos informations d'identification d'administrateur). Modifiez le mot de passe du compte sa avec la syntaxe suivante.
ALTER LOGIN sa WITH PASSWORD = '************'; Warning
Remplacez ************ par un mot de passe fort.
Les étapes suivantes modifient maintenant SQL Server en mode multi-utilisateur. Fermez SSMS.
Dans le volet de gauche du Gestionnaire de configuration SQL Server, sélectionnez Services SQL Server. Dans le volet droit, cliquez avec le bouton droit sur l'instance de SQL Server, puis cliquez sur Propriétés.
Dans l'onglet Paramètres de démarrage, dans la zone Paramètres existants, sélectionnez -m, puis cliquez sur Supprimer.
Remarque
Pour certaines versions antérieures de SQL Server, il n'y a pas d'onglet Paramètres de démarrage. Dans ce cas, sous l'onglet Avancé, double-cliquez sur Paramètres de démarrage. Les paramètres s'ouvrent dans une très petite fenêtre. Supprimez le; -m que vous avez ajouté précédemment, puis cliquez sur OK.
Cliquez avec le bouton droit sur le nom de votre serveur, puis cliquez sur Redémarrer.
Vous devriez maintenant pouvoir vous connecter normalement avec l'un des comptes qui est maintenant membre du rôle de serveur fixe sysadmin.
Il suffit en fait d’ajouter -m aux paramètres de démarrage sur Sql Server Configuration Manager, de redémarrer le service, d’aller dans ssms et d’ajouter une case à cocher sysadmin sur votre compte, puis de -m relancer à nouveau et d’utiliser comme d’habitude.
Options de démarrage du service de moteur de base de données
-m Démarre une instance de SQL Server en mode mono-utilisateur.