Wie erstelle ich einen neuen Benutzer in einer SQL Azure-Datenbank?

74

Ich versuche die folgende Vorlage zu verwenden:

-- =================================================
-- Create User as DBO template for SQL Azure Database
-- =================================================
-- For login <login_name, sysname, login_name>, create a user in the database
CREATE USER <user_name, sysname, user_name>
    FOR LOGIN <login_name, sysname, login_name>
    WITH DEFAULT_SCHEMA = <default_schema, sysname, dbo>
GO

-- Add user to the database owner role
EXEC sp_addrolemember N'db_owner', N'<user_name, sysname, user_name>'
GO

Ich möchte einen Benutzer namens user1 mit dem Passwort 'user1pass' erstellen. Ich habe eine Verbindung mit meiner Standarddatenbank "Authentifizierung" hergestellt und ein Abfragefenster geöffnet.

Aber die Vorlage macht für mich keinen Sinn. Was ist zum Beispiel sysname, wo gebe ich das Passwort ein und was soll ich als Standardschema verwenden?

Der jeweilige Benutzer muss die Macht haben, alles zu tun. Aber wie richte ich es ein, damit er alles kann? Wird das gemacht, wenn ich den Benutzer zum Datenbankbesitzer mache?

Bisher habe ich versucht:

CREATE USER user1, sysname, user1
    FOR LOGIN user1, sysname, user1
    WITH DEFAULT_SCHEMA = dbo, sysname, dbo
GO

Geben:

Meldung 102, Ebene 15, Status 1, Zeile 1 Falsche Syntax in der Nähe von ','.

und:

CREATE USER user1
    FOR LOGIN user1
    WITH DEFAULT_SCHEMA = dbo
GO

Geben:

Meldung 15007, Ebene 16, Status 1, Zeile 1 'Benutzer1' i

s kein gültiges Login oder Sie haben keine Berechtigung.

DineshDB
quelle
1
Mögliches Duplikat von Erstellen eines neuen Benutzers / Logins in SQL Azure
Michael Freidgeim

Antworten:

34

Unter diesem Link finden Sie alle Informationen: https://azure.microsoft.com/en-us/blog/adding-users-to-your-sql-azure-database/

Zuerst müssen Sie eine Anmeldung für SQL Azure erstellen. Die Syntax lautet wie folgt:

CREATE LOGIN username WITH password='password';

Dieser Befehl muss in der Master-Datenbank ausgeführt werden. Erst danach können Sie Befehle ausführen, um einen Benutzer in der Datenbank zu erstellen. Die Funktionsweise von SQL Azure oder SQL Server besteht darin, dass zuerst auf Serverebene ein Login erstellt und dann in jeder Datenbank einem Benutzer zugeordnet wird.

HTH

Igorek
quelle
Also sollte ich zum ersten Mal "Master verwenden" sagen, dann den Login erstellen und dann "Authentifizierung verwenden" sagen? Wie kann ich mich im Abfragefenster als anderer Benutzer verbinden, um Dinge auszuprobieren?
2
Es gibt keine Möglichkeit, Datenbanken nach dem Wechsel vom Master zu einer anderen Datenbank in SQL Azure zu wechseln. Klicken Sie mit der rechten Maustaste auf das Abfragefenster und klicken Sie auf "Verbindung-> Verbindung ändern" - dies ermöglicht es Ihnen, die Verbindung mit verschiedenen Anmeldeinformationen
wiederherzustellen
Ich habe einige Schwierigkeiten, dies auf dem neuesten SQL Azure-Server (V12) zum Laufen zu bringen. Irgendwelche Hinweise?
Geethanga
2
Der Beitrag gibt ein wirklich klares und leicht zu befolgendes Beispiel: kitsula.com/Article/…
uniquelau
2
Das ist irreführend. Ein 'enthaltener Benutzer' hat keinen Login im Master, sodass Sie einfach einen Benutzer in der Datenbank selbst erstellen können. Tatsächlich wird dieser Ansatz empfohlen, da In a contained database, creating users helps separate the database from the instance of the Database Engine so that the database can easily be moved to another instance of SQL Server. docs.microsoft.com/en-us/sql/t-sql/statements/…
Simon_Weaver
116

Bearbeiten - Enthaltener Benutzer (Version 12 und höher)

Ab SQL Azure 12 werden Datenbanken als enthaltene Datenbanken erstellt, mit denen Benutzer direkt in Ihrer Datenbank erstellt werden können, ohne dass eine Serveranmeldung über den Master erforderlich ist.

CREATE USER [MyUser] WITH PASSWORD = 'Secret';
ALTER ROLE [db_datareader] ADD MEMBER [MyUser];

Beachten Sie beim Herstellen einer Verbindung zur Datenbank, wenn Sie einen enthaltenen Benutzer verwenden, dass Sie die Datenbank immer in der Verbindungszeichenfolge angeben müssen.

Verbindung über einen enthaltenen Benutzer herstellen

Herkömmliche Serveranmeldung - Datenbankbenutzer (Pre v 12)

Um die Antwort von @ Igorek zu ergänzen, können Sie in SQL Server Management Studio Folgendes tun:

Erstellen Sie die neue Anmeldung auf dem Server
In master(über das Available databasesDropdown-Menü in SSMS - dies liegt daran, dass USE masterdies in Azure nicht funktioniert):

Geben Sie hier die Bildbeschreibung ein

Erstellen Sie den Login:

CREATE LOGIN username WITH password='password';

Neuen Benutzer in der Datenbank erstellen
Wechseln Sie zur eigentlichen Datenbank (erneut über die Dropdown-Liste verfügbare Datenbanken oder eine neue Verbindung).

CREATE USER username FROM LOGIN username;

(Ich habe angenommen, dass Sie möchten, dass der Benutzer und die Anmeldungen als verknüpft werden username, aber ändern, wenn dies nicht der Fall ist.)

Fügen Sie nun den Benutzer zu den relevanten Sicherheitsrollen hinzu

EXEC sp_addrolemember N'db_owner', N'username'
GO

(Offensichtlich sollte ein App-Benutzer weniger Berechtigungen haben als dbo.)

StuartLC
quelle
Diese Antwort scheint veraltet zu sein, der Benutzer kann direkt in der Datenbankinstanz selbst erstellt werden, siehe: docs.microsoft.com/en-us/sql/t-sql/statements/…
tbone
Sie haben Recht - Seit 12 gibt es jetzt Contained Users, die den CREATE LOGINSchritt nicht benötigen . Ich habe aktualisiert.
StuartLC
23

Ich habe die Antworten hier befolgt, aber als ich versuchte, eine Verbindung mit meinem neuen Benutzer herzustellen, wurde eine Fehlermeldung angezeigt "The server principal 'newuser' is not able to access the database 'master' under the current security context".

Ich musste auch einen neuen Benutzer in der Mastertabelle erstellen, um mich erfolgreich bei SSMS anzumelden.

USE [master]
GO
CREATE LOGIN [newuser] WITH PASSWORD=N'blahpw'
GO
CREATE USER [newuser] FOR LOGIN [newuser] WITH DEFAULT_SCHEMA=[dbo]
GO

USE [MyDatabase]
CREATE USER newuser FOR LOGIN newuser WITH DEFAULT_SCHEMA = dbo
GO
EXEC sp_addrolemember N'db_owner', N'newuser'
GO
nthpixel
quelle
11

Sie können einfach einen enthaltenen Benutzer in SQL DB V12 erstellen.

Create user containeduser with password = 'Password'

Die Anmeldung eines enthaltenen Benutzers ist effizienter als die Anmeldung bei der Datenbank mit der vom Master erstellten Anmeldung. Weitere Informationen finden Sie unter http://www.sqlindepth.com/contained-users-in-sql-azure-db-v12/

Sirisha Chamarthi
quelle
1
Dies erfordert eine enthaltene Datenbank, die einige Einschränkungen aufweist
Shane Courtrille
In SQL Azure unterstützen ALLE Datenbanken diese Funktion. Tatsächlich kann es nicht deaktiviert werden.
Simon_Weaver
1
Dies ist die beste Antwort IMO. Kurz und prägnant und es funktioniert einfach.
Philippe
beste Antwort, aber trotzdem saugt Azure SQL
Toolkit
"Während Microsoft den SQL-Datenbankdienst weiterentwickelt und auf SLAs mit höherer Garantie umstellt, müssen Sie möglicherweise zum enthaltenen Datenbankbenutzermodell und zu Firewall-Regeln mit Datenbankbereich wechseln, um die SLA mit höherer Verfügbarkeit und höhere maximale Anmeldungsraten für eine bestimmte Datenbank zu erzielen. Microsoft empfiehlt Sie heute solche Änderungen zu berücksichtigen. " - docs.microsoft.com/en-us/sql/relational-databases/security/…
Alexander
1

Erstellen Sie einen Benutzer und fügen Sie ihn dann einer bestimmten Rolle hinzu:

CREATE USER [test] WITH PASSWORD=N'<strong password>'
go
ALTER ROLE [db_datareader] ADD MEMBER [test]
go
Antonio Santise
quelle
Willkommen bei SO. Diese Frage hat bereits eine akzeptierte Antwort, die mit Ihrer identisch ist. Siehe stackoverflow.com/help/how-to-answer .
Nick
0

Ich denke, die Vorlagen verwenden die folgende Notation: Variablenname, Variablentyp, Standardwert.

Sysname ist ein integrierter Datentyp, der die Namen von Systemobjekten enthalten kann.

Es ist auf 128 Unicode-Zeichen beschränkt.

-- same as sysname type
declare @my_sysname nvarchar(128);
CRAFTY DBA
quelle
Vielen Dank, aber wenn Sie sagen, was Sie dann sagen, wie würde ich den Benutzer und das Passwort erstellen. Ich sehe keine Möglichkeit, das Passwort festzulegen.
0

Ich fand diesen Link sehr hilfreich:
https://azure.microsoft.com/en-gb/documentation/articles/sql-database-manage-logins/

Es enthält Details zu folgenden Themen:
- Azure SQL-Datenbank-Abonnentenkonto
- Verwenden von Azure Active Directory-Benutzern für den Zugriff auf die Datenbank
- Hauptkonten auf Serverebene (uneingeschränkter Zugriff)
- Hinzufügen von Benutzern zur dbmanagerDatenbankrolle

Ich habe diese und Stuarts Antwort verwendet, um Folgendes zu tun:
In der masterDatenbank (siehe Link, wer die Berechtigungen dazu hat):

CREATE LOGIN [MyAdmin] with password='ReallySecurePassword'

Und dann auf der fraglichen Datenbank:

CREATE USER [MyAdmin] FROM LOGIN [MyAdmin]
ALTER ROLE db_owner ADD MEMBER [MyAdmin]

Sie können auch solche Benutzer gemäß dem Link erstellen:

CREATE USER [[email protected]] FROM EXTERNAL PROVIDER;
Noelicus
quelle