web-dev-qa-db-fra.com

SQL Server Script pour créer un nouvel utilisateur

Je veux écrire un script pour créer un utilisateur admin (avec abcd mot de passe) dans SQL Server Express. Aussi, je veux assigner à cet utilisateur admin tous les droits.

86
Ashish Ashu

Sur la base de votre question, je pense que vous pouvez être un peu confus quant à la différence entre un utilisateur et un connexion . Un login est un compte sur SQL Server dans son ensemble - une personne pouvant se connecter au serveur et possédant un mot de passe. Un utilisateur est un login ayant accès à une base de données spécifique.

La création d'un login est simple et doit (évidemment) être effectuée avant de créer un utilisateur compte pour la connexion dans une base de données spécifique:

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

Voici comment vous créez un utilisateur avec les privilèges db_owner à l'aide du login . vient 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 de SQL Server) pour le compte d'administrateur Windows lors de l'installation de la base de données. Dans la plupart des cas, je ne l’utilise que lorsque j’administre une base de données (qui dispose de tous les privilèges).

Toutefois, si vous souhaitez accéder à SQL Server à partir d'une application, vous devrez configurer le serveur pour le "Mode mixte" (connexions Windows et SQL) et créer un identifiant comme indiqué ci-dessus. Vous obtiendrez alors les privilèges "accordés" à cette connexion SQL en fonction des besoins de votre application. Voir ici pour plus d'informations.

UPDATE: 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 facile que d'octroyer manuellement des privilèges. Si vous google, vous verrez beaucoup de liens. Cependant, vous devez toujours comprendre la distinction entre un login et un utilisateur.

173
Mark Brittingham

Droits d’administrateur complets pour l’ensemble du serveur ou pour 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 laisser de côté les paramètres CHECK_ en fonction de la version de SQL Server Express que vous utilisez (il est presque toujours utile d'inclure cette information dans votre question).

28
Aaron Bertrand

Si vous voulez créer un script générique, vous pouvez le faire avec une instruction Execute avec un remplacement par votre nom d'utilisateur et votre nom de 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)
6
Guish

Vous pouvez utiliser:

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

Pour créer le login (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 également leur accorder 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 le schéma que vous avez attribué aux utilisateurs.

(Voir ici pour plus de détails)

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

4
Simon P Stevens
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 pour réseau 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
1

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

J’ai installé de nombreuses fois différentes versions de SQL Server. C’est généralement une procédure simple. Installez le serveur, lancez la console de gestion, c’est aussi simple que cela. Cependant, une fois l'installation terminée, lorsque j'ai tenté de me connecter au serveur à l'aide de SSMS, une erreur semblable à celle ci-dessous s'est produite:

Erreur de connexion SQL Server 18456 "Échec de la connexion de l'utilisateur… (Microsoft SQL Server, Erreur: 18456)". J'ai l'habitude de voir cette erreur si j'ai saisi un mot de passe incorrect lors de la connexion, mais uniquement 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. j'ai peut-être manqué une étape et j'ai oublié de l'ajouter. En tout cas, tout espoir n'a pas été perdu.

Pour résoudre ce problème, si vous ne pouvez pas vous connecter avec un autre compte à SQL Server, ajoutez votre connexion réseau via une interface de ligne de commande. Pour que cela fonctionne, vous devez être un administrateur 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 contenant le fichier EXE de SQL Server. La valeur par défaut de 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 ouverte l'invite de commande, 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 Nom_serveur\Nom_instance". Dans cette fenêtre, exécutez les lignes suivantes en appuyant sur Entrée après chaque option: 1

CREATE LOGIN [nom_domaine\nom_utilisateur] FROM 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 commande; vous serez invité à appuyer sur Y pour mettre fin au processus SQL Server.

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

0