SQL Server-Skript zum Erstellen eines neuen Benutzers

98

Ich möchte ein Skript schreiben, um einen adminBenutzer (mit abcdKennwort) in SQL Server Express zu erstellen . Außerdem möchte ich diesem Benutzer die adminvollen Rechte zuweisen .

Ashish Ashu
quelle

Antworten:

196

Aufgrund Ihrer Frage denke ich, dass Sie über den Unterschied zwischen einem Benutzer und einem Login etwas verwirrt sind . Ein Login ist ein Konto auf dem gesamten SQL Server - jemand, der sich beim Server anmelden kann und über ein Kennwort verfügt. Ein Benutzer ist ein Login mit Zugriff auf eine bestimmte Datenbank.

Das Erstellen eines Logins ist einfach und muss (offensichtlich) erfolgen, bevor ein Benutzerkonto für das Login in einer bestimmten Datenbank erstellt wird:

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

Hier ist , wie Sie erstellen Benutzer mit db_owner Berechtigungen die Verwendung Anmeldung einfach erklärt:

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

Jetzt sind Logins etwas flüssiger, als ich es oben erscheinen lasse. Beispielsweise wird bei der Installation der Datenbank automatisch (in den meisten SQL Server-Installationen) ein Anmeldekonto für das Windows-Administratorkonto erstellt. In den meisten Situationen verwende ich das nur, wenn ich eine Datenbank verwalte (sie hat alle Berechtigungen).

Wenn Sie jedoch von einer Anwendung aus auf den SQL Server zugreifen möchten, sollten Sie den Server für den "gemischten Modus" (sowohl Windows- als auch SQL-Anmeldungen) einrichten und wie oben gezeigt eine Anmeldung erstellen. Sie erhalten dann Berechtigungen für diese SQL-Anmeldung, basierend auf den Anforderungen für Ihre App. Sehen Sie hier für weitere Informationen.

UPDATE: Aaron weist darauf hin, dass sp_addsrvrolemember verwendet wird, um Ihrem Anmeldekonto eine vorbereitete Rolle zuzuweisen. Dies ist eine gute Idee - schneller und einfacher als das manuelle Erteilen von Berechtigungen. Wenn Sie es googeln, sehen Sie viele Links. Sie müssen jedoch den Unterschied zwischen einem Login und einem Benutzer verstehen.

Mark Brittingham
quelle
1
Genau das, was ich brauchte, danke. Ich hatte nicht erwartet, dass es so einfach sein würde - und dass es perfekt funktioniert !!
Dave
33

Volle Administratorrechte für den gesamten Server oder eine bestimmte Datenbank? Ich denke, die anderen antworteten für eine Datenbank, aber für den Server:

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';

Je nachdem, welche Version von SQL Server Express Sie verwenden, müssen Sie möglicherweise die Parameter CHECK_ weglassen (es ist fast immer nützlich, diese Informationen in Ihre Frage aufzunehmen).

Aaron Bertrand
quelle
Genau das, was ich möchte Ich habe versucht, eine Anmeldung mit c # mithilfe der Microsoft.SqlServer.Management.Smo.Login-Klasse zu erstellen. aber ich konnte nicht erstellen. Dies funktioniert mit einfachem Code in c # danke
kordiseps
6

Wenn Sie ein generisches Skript erstellen möchten, können Sie dies mit einer Execute-Anweisung durch Ersetzen durch Ihren Benutzernamen und Datenbanknamen tun

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
quelle
Ich habe diese Antwort unbeabsichtigt abgelehnt, aber jetzt kann ich meine Ablehnung nicht mehr rückgängig machen, ohne sie zu bearbeiten. Ich habe Junk-Text eingefügt, nur um meine Downvote zu entfernen, aber jetzt kann ich weder Junk-Text noch die Downvote entfernen ... Es tut mir leid
sblandin
4

Sie können verwenden:

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

Um die Login zu erstellen (siehe hier für weitere Details).

Dann müssen Sie möglicherweise verwenden:

CREATE USER user_name 

Um den Benutzer zu erstellen, der dem Login für die bestimmte Datenbank zugeordnet ist, möchten Sie ihm auch Zugriff gewähren.

(Siehe hier für Details)

Sie können auch verwenden:

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

So richten Sie die Berechtigungen für die Schemas ein, denen Sie die Benutzer zugewiesen haben.

(Siehe hier für Details)

Zwei weitere Befehle, die Sie möglicherweise nützlich finden, sind ALTER USER und ALTER LOGIN .

Simon P Stevens
quelle
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

Diese vollständige Hilfe für das Netzwerk mit:

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
quelle
0

In der vergangenen Woche habe ich Microsoft SQL Server 2014 Developer Edition auf meiner Entwicklungsbox installiert und bin sofort auf ein Problem gestoßen, das ich noch nie zuvor gesehen hatte.

Ich habe unzählige Male verschiedene Versionen von SQL Server installiert, und es ist normalerweise ein schmerzloses Verfahren. Installieren Sie den Server, führen Sie die Verwaltungskonsole aus, so einfach ist das. Nach Abschluss dieser Installation wurde jedoch beim Versuch, mich mit SSMS beim Server anzumelden, ein Fehler wie der folgende angezeigt:

SQL Server-Anmeldefehler 18456 „Anmeldung für Benutzer fehlgeschlagen… (Microsoft SQL Server, Fehler: 18456)“ Ich bin es gewohnt, diesen Fehler zu sehen, wenn ich beim Anmelden das falsche Kennwort eingegeben habe - aber nur, wenn ich den gemischten Modus verwende ( Windows- und SQL-Authentifizierung). In diesem Fall wurde der Server nur mit Windows-Authentifizierung eingerichtet, und das Benutzerkonto war mein eigenes. Ich bin mir immer noch nicht sicher, warum mein Benutzer während des Setups nicht zur SYSADMIN-Rolle hinzugefügt wurde. Vielleicht habe ich einen Schritt verpasst und vergessen, ihn hinzuzufügen. Jedenfalls war nicht jede Hoffnung verloren.

Wenn Sie sich nicht mit einem anderen Konto bei SQL Server anmelden können, können Sie dies beheben, indem Sie Ihre Netzwerkanmeldung über eine Befehlszeilenschnittstelle hinzufügen. Damit dies funktioniert, müssen Sie unter Windows Administrator für den PC sein, bei dem Sie angemeldet sind.

Beenden Sie den MSSQL-Dienst. Öffnen Sie eine Eingabeaufforderung mit Als Administrator ausführen. Wechseln Sie in den Ordner, in dem sich die SQL Server EXE-Datei befindet. Die Standardeinstellung für SQL Server 2014 lautet "C: \ Programme \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn". Führen Sie den folgenden Befehl aus: "sqlservr.exe –m". Dadurch wird SQL Server im Einzelbenutzermodus gestartet. Öffnen Sie diese Eingabeaufforderung geöffnet, und wiederholen Sie die Schritte 2 und 3. Führen Sie im zweiten Eingabeaufforderungsfenster „SQLCMD –S Servername \ Instanzname“ aus. Führen Sie in diesem Fenster die folgenden Zeilen aus und drücken Sie nach jeder Eingabetaste: 1

CREATE LOGIN [domainName \ loginName] FROM WINDOWS 2 GO 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME', 'SYSADMIN' 4 GO Verwenden Sie STRG + C, um beide Prozesse in den Eingabeaufforderungsfenstern zu beenden. Sie werden aufgefordert, Y zu drücken, um den SQL Server-Prozess zu beenden.

Starten Sie den MSSQL-Dienst neu. Das ist es! Sie sollten sich jetzt mit Ihrem Netzwerk-Login anmelden können.

Mohammad Shahnawaz
quelle