Script SQL Server pour créer un nouvel utilisateur

99

Je souhaite écrire un script pour créer un adminutilisateur (avec abcdmot de passe) dans SQL Server Express. Je souhaite également attribuer admintous les droits à cet utilisateur .

Ashish Ashu
la source

Réponses:

198

Sur la base de votre question, je pense que vous pouvez être un peu confus au sujet de la différence entre un utilisateur et une connexion . Une connexion est un compte sur le serveur SQL dans son ensemble - quelqu'un qui est capable de se connecter au serveur et qui possède un mot de passe. Un utilisateur est un identifiant ayant accès à une base de données spécifique.

Créer un Login est facile et doit (évidemment) être fait avant de créer un compte utilisateur pour le login dans une base de données spécifique:

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

Voici comment créer un utilisateur avec les privilèges db_owner à l'aide du login que vous venez de déclarer:

Use YourDatabase;
GO

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'NewAdminName')
BEGIN
    CREATE USER [NewAdminName] FOR LOGIN [NewAdminName]
    EXEC sp_addrolemember N'db_owner', N'NewAdminName'
END;
GO

Maintenant, les connexions sont un peu plus fluides que je ne le fais paraître ci-dessus. Par exemple, un compte de connexion est automatiquement créé (dans la plupart des installations SQL Server) pour le compte Administrateur Windows lorsque la base de données est installée. Dans la plupart des situations, je l'utilise uniquement lorsque j'administre une base de données (elle a tous les privilèges).

Toutefois, si vous souhaitez accéder au serveur SQL à partir d'une application, vous souhaiterez configurer le serveur pour le «mode mixte» (connexions Windows et SQL) et créer une connexion comme indiqué ci-dessus. Vous accorderez ensuite des privilèges à cette connexion SQL en fonction de ce qui est nécessaire pour votre application. Voir ici pour plus d' informations.

MISE À JOUR: Aaron souligne l'utilisation de sp_addsrvrolemember pour attribuer un rôle préparé à votre compte de connexion. C'est une bonne idée - plus rapide et plus simple que l'octroi manuel de privilèges. Si vous recherchez sur Google, vous verrez de nombreux liens. Cependant, vous devez toujours comprendre la distinction entre une connexion et un utilisateur.

Mark Brittingham
la source
1
Exactement ce dont j'avais besoin, merci. Je ne m'attendais pas à ce que ce soit si facile - et que cela fonctionne parfaitement !!
Dave
33

Droits d'administrateur complets pour l'ensemble du serveur ou une base de données spécifique? Je pense que les autres ont répondu pour une base de données, mais pour le serveur:

USE [master];
GO
CREATE LOGIN MyNewAdminUser 
    WITH PASSWORD    = N'abcd',
    CHECK_POLICY     = OFF,
    CHECK_EXPIRATION = OFF;
GO
EXEC sp_addsrvrolemember 
    @loginame = N'MyNewAdminUser', 
    @rolename = N'sysadmin';

Vous devrez peut-être ignorer les paramètres CHECK_ en fonction de la version de SQL Server Express que vous utilisez (il est presque toujours utile d'inclure ces informations dans votre question).

Aaron Bertrand
la source
Exactement ce que je veux, j'essayais de créer une connexion avec c # en utilisant la classe Microsoft.SqlServer.Management.Smo.Login. mais je ne pouvais pas créer. cela fonctionne avec du code simple en c # merci
kordiseps
6

Si vous souhaitez créer un script générique, vous pouvez le faire avec une instruction Execute avec un Remplacer par votre nom d'utilisateur et le nom de la base de données

Declare @userName as varchar(50); 
Declare @defaultDataBaseName as varchar(50);
Declare @LoginCreationScript as varchar(max);
Declare @UserCreationScript as varchar(max);
Declare @TempUserCreationScript as varchar(max);
set @defaultDataBaseName = 'data1';
set @userName = 'domain\userName';
set @LoginCreationScript ='CREATE LOGIN [{userName}]
FROM WINDOWS 
WITH DEFAULT_DATABASE ={dataBaseName}'

set @UserCreationScript ='
USE {dataBaseName}
CREATE User [{userName}] for LOGIN [{userName}];
EXEC sp_addrolemember ''db_datareader'', ''{userName}'';
EXEC sp_addrolemember ''db_datawriter'', ''{userName}'';
Grant Execute on Schema :: dbo TO [{userName}];'
/*Login creation*/
set @LoginCreationScript=Replace(Replace(@LoginCreationScript, '{userName}', @userName), '{dataBaseName}', @defaultDataBaseName)
set @UserCreationScript =Replace(@UserCreationScript, '{userName}', @userName)
Execute(@LoginCreationScript)

/*User creation and role assignment*/
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', @defaultDataBaseName)
Execute(@TempUserCreationScript)
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', 'db2')
Execute(@TempUserCreationScript)
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', 'db3')
Execute(@TempUserCreationScript)
Guish
la source
J'ai involontairement décliné cette réponse, mais maintenant je ne peux pas annuler mon vote défavorable sans la modifier. J'ai mis du texte indésirable juste pour supprimer mon vote défavorable, mais maintenant je ne peux supprimer ni le texte indésirable ni le
vote négatif
4

Vous pouvez utiliser:

CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO 

Pour créer la connexion (voir ici pour plus de détails).

Ensuite, vous devrez peut-être utiliser:

CREATE USER user_name 

Pour créer l'utilisateur associé à la connexion pour la base de données spécifique, vous souhaitez leur accorder également l'accès.

(Voir ici pour plus de détails)

Vous pouvez aussi utiliser:

GRANT permission  [ ,...n ] ON SCHEMA :: schema_name

Pour configurer les autorisations pour les schémas auxquels vous avez attribué les utilisateurs.

(Voir ici pour plus de détails)

Deux autres commandes qui pourraient vous être utiles sont ALTER USER et ALTER LOGIN .

Simon P Stevens
la source
2
CREATE LOGIN AdminLOGIN WITH PASSWORD = 'pass'
GO


Use MyDatabase;
GO

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'AdminLOGIN')
BEGIN
    CREATE USER [AdminLOGIN] FOR LOGIN [AdminLOGIN]
    EXEC sp_addrolemember N'db_owner', N'AdminLOGIN'
    EXEC master..sp_addsrvrolemember @loginame = N'adminlogin', @rolename = N'sysadmin'
END;
GO

cette aide complète vous pour le réseau en utilisant:

1- Right-click on SQL Server instance at root of Object Explorer, click on Properties
Select Security from the left pane.

2- Select the SQL Server and Windows Authentication mode radio button, and click OK.

3- Right-click on the SQL Server instance, select Restart (alternatively, open up Services and restart the SQL Server service).

4- Close sql server application and reopen it

5- open 'SQL Server Configuration Manager' and tcp enabled for network

6-Double-click the TCP/IP protocol, go to the IP Addresses tab and scroll down to the IPAll section.

7-Specify the 1433 in the TCP Port field (or another port if 1433 is used by another MSSQL Server) and press the OK 

8-Open in Sql Server: Security And Login  And Right Click on Login Name And Select Peroperties And Select Server Roles And 
  Checked The Sysadmin And Bulkadmin then Ok.
9-firewall: Open cmd as administrator and type: 
      netsh firewall set portopening protocol = TCP port = 1433 name = SQLPort mode = ENABLE scope = SUBNET profile = CURRENT
Ali asghar Fendereski
la source
0

La semaine dernière, j'ai installé Microsoft SQL Server 2014 Developer Edition sur ma boîte de développement et j'ai immédiatement rencontré un problème que je n'avais jamais vu auparavant.

J'ai installé plusieurs versions de SQL Server d'innombrables fois, et c'est généralement une procédure indolore. Installez le serveur, exécutez la console de gestion, c'est aussi simple que cela. Cependant, après avoir terminé cette installation, lorsque j'ai essayé de me connecter au serveur à l'aide de SSMS, j'ai eu une erreur comme celle ci-dessous:

Erreur de connexion SQL Server 18456 «Échec de la connexion pour l'utilisateur… (Microsoft SQL Server, erreur: 18456)» J'ai l'habitude de voir cette erreur si j'ai tapé le mauvais mot de passe lors de la connexion - mais ce n'est que si j'utilise le mode mixte ( Authentification Windows et SQL). Dans ce cas, le serveur a été configuré avec l'authentification Windows uniquement et le compte d'utilisateur était le mien. Je ne sais toujours pas pourquoi il n'a pas ajouté mon utilisateur au rôle SYSADMIN lors de l'installation; peut-être ai-je manqué une étape et oublié de l'ajouter. En tout cas, tout espoir n’a pas été perdu.

La façon de résoudre ce problème, si vous ne pouvez pas vous connecter avec un autre compte à SQL Server, consiste à ajouter votre connexion réseau via une interface de ligne de commande. Pour que cela fonctionne, vous devez être administrateur sur Windows pour le PC auquel vous êtes connecté.

Arrêtez le service MSSQL. Ouvrez une invite de commande en utilisant Exécuter en tant qu'administrateur. Accédez au dossier qui contient le fichier EXE de SQL Server; la valeur par défaut pour SQL Server 2014 est «C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn». Exécutez la commande suivante: «sqlservr.exe –m». Cela démarrera SQL Server en mode mono-utilisateur. Tout en laissant cette invite de commande ouverte, ouvrez-en une autre en répétant les étapes 2 et 3. Dans la deuxième fenêtre d'invite de commande, exécutez «SQLCMD –S Server_Name \ Instance_Name» Dans cette fenêtre, exécutez les lignes suivantes, en appuyant sur Entrée après chacune d'elles: 1

CRÉER UNE CONNEXION [domainName \ loginName] À PARTIR DE WINDOWS 2 GO 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME', 'SYSADMIN' 4 GO Utilisez CTRL + C pour terminer les deux processus dans les fenêtres d'invite de commandes; vous serez invité à appuyer sur Y pour terminer le processus SQL Server.

Redémarrez le service MSSQL. C'est tout! Vous devriez maintenant pouvoir vous connecter en utilisant votre connexion réseau.

Mohammad Shahnawaz
la source