Wie kann ich eine Anmeldung mit T-SQL (nicht SSMS) einer Datenbank zuordnen?

11

Ich schreibe ein Programm, bei dem ich alle Berechtigungen und alles im Code zuweisen muss. Ich bin in diesem Teil stecken geblieben:

Geben Sie hier die Bildbeschreibung ein

Ich möchte nur das Äquivalent zum Klicken auf das Kästchen unter "Map" für die msdb-Datenbank und zum Zuweisen dieses Benutzers zur SqlAgentUser-Rolle tun. Ich benötige einen Benutzer, um SQL Server Agent-Jobs hinzufügen / bearbeiten zu können. Ich kann die Einstellungen mit SSMS richtig machen, aber ich kann für mein ganzes Leben nicht herausfinden, wie es in Raw SQL geht.

Ich habe ALTER LOGIN untersucht, aber ich sehe nichts, was das tut, was ich brauche. Ich vermute, ich kenne die richtigen Begriffe für Google einfach nicht. Normalerweise mache ich so etwas nicht.

Jede Hilfe wird sehr geschätzt!

eddie_cat
quelle
3
Sie können "Skripte generieren", von denen ich denke, dass sie Ihnen bei zukünftigen Projekten helfen werden. Oben auf dem Bildschirm.
Racer SQL
1
@ RafaelPiccinelli oh mein Gott, das ist so hilfreich! Das habe ich dort oben noch nie bemerkt! Danke!
eddie_cat
Ich bin wirklich schlecht in Codes, das hilft mir sehr.
Racer SQL

Antworten:

18
USE msdb;
GO
CREATE USER shims FROM LOGIN shims;
GO
ALTER ROLE SqlAgentUserRole ADD MEMBER shims;
GO

ScriptWenn Sie später wissen, wie etwas in der Benutzeroberfläche, aber nicht in einem Skript ausgeführt wird, ist dies die Option in den meisten Dialogfeldern. Sie zeigt Ihnen, welches Skript SSMS ausgeführt hätte:

Geben Sie hier die Bildbeschreibung ein

Aaron Bertrand
quelle
3

Wenn Sie die aktuelle \ Standarddatenbank in eine andere ändern möchten, versuchen Sie Folgendes:

alter login <loginname> with default_database = <dbname>;

Erstellen Sie nun einen Benutzer für die oben erstellte Anmeldung

 use <dbname>;
 create user <username> from login <loginname>;

Und jetzt können Sie dem oben genannten Benutzer Benutzer für die Anmeldung wie folgt Rollen zuweisen:

use <dbname>
exec sp_addrolemember 'db_owner', '<username>';
KASQLDBA
quelle
3
Aus den Dokumenten :This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Use ALTER ROLE instead.
Aaron Bertrand
Sollte ich die Standarddatenbank jedes Mal ändern, wenn ich etwas mit diesem Benutzer in msdb tun möchte? Im obigen Fenster können Sie anscheinend mehr als eine Datenbank gleichzeitig einem Benutzer zuordnen ... ist das falsch?
eddie_cat
@eddie_cat Nein, ich sehe in diesem Fall keinen Grund, die Standarddatenbank zu ändern, es sei denn, Sie möchten, dass dieser Benutzer standardmäßig immer eine Verbindung zu einer bestimmten Datenbank herstellt.
Aaron Bertrand
Benutzer für die Anmeldung erstellen; Die korrekte Syntax lautet wie folgt: --------------------------------------- ------------------------------ USE [DatabaseName] GO CREATE USER [UserName] FOR LOGIN [LoginName] GO
Kundan Dasange