Comment puis-je mapper une connexion à une base de données à l'aide de T-SQL (pas SSMS)

12

J'écris un programme qui me demande d'attribuer toutes les autorisations et tout dans le code. Je suis resté coincé dans cette partie:

entrez la description de l'image ici

Je veux juste faire l'équivalent de cliquer sur la petite case sous "Carte" pour la base de données msdb et d'affecter cet utilisateur au rôle SqlAgentUser. J'ai besoin d'un utilisateur pour pouvoir ajouter / modifier des travaux de l'Agent SQL Server. Je peux obtenir les bons paramètres en utilisant SSMS mais je ne peux pas pour la vie de moi comprendre comment le faire en SQL brut.

J'ai examiné ALTER LOGIN mais je ne vois rien qui fasse ce dont j'ai besoin. Je soupçonne que je ne connais tout simplement pas les termes corrects pour Google. Je ne fais pas normalement ce genre de choses.

Toute aide est très appréciée!

eddie_cat
la source
3
Vous pouvez "générer un script" qui, je pense, vous aidera dans vos futurs projets. En haut de l'écran.
Racer SQL
1
@RafaelPiccinelli oh my gosh qui est si utile! Je n'ai même jamais remarqué ça là-haut! Merci!
eddie_cat
Je suis vraiment mauvais aux codes, cela m'aide beaucoup.
Racer SQL

Réponses:

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

De plus, pour référence future, chaque fois que vous savez comment faire quelque chose dans l'interface utilisateur mais pas dans un script, voici à quoi sert l' Scriptoption dans la plupart des boîtes de dialogue - cela vous montrera quel script SSMS aurait exécuté:

entrez la description de l'image ici

Aaron Bertrand
la source
3

Si vous souhaitez changer la base de données actuelle \ par défaut en une autre, essayez:

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

Maintenant, créez un utilisateur pour la connexion ci-dessus créée

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

Et maintenant, vous pouvez attribuer des rôles à l'utilisateur de création ci-dessus pour la connexion comme ci-dessous:

use <dbname>
exec sp_addrolemember 'db_owner', '<username>';
KASQLDBA
la source
3
De la documentation :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
Dois-je donc changer la base de données par défaut chaque fois que je veux faire quoi que ce soit avec cet utilisateur dans msdb? Dans la fenêtre ci-dessus, il semble que vous pouvez avoir plus d'une base de données associée à un utilisateur à la fois ... est-ce faux?
eddie_cat
@eddie_cat Non, je ne vois aucune raison dans ce cas de changer la base de données par défaut, sauf si vous voulez que cet utilisateur se connecte toujours à certaines bases de données par défaut.
Aaron Bertrand
Pour créer un utilisateur pour la connexion; la syntaxe correcte est la suivante: ------------------------------------------- ------------------------------ UTILISER [DatabaseName] GO CRÉER UN UTILISATEUR [UserName] POUR LA CONNEXION [LoginName] GO
Kundan Dasange