web-dev-qa-db-fra.com

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

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

enter image description here

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 pas les termes corrects pour Google. Je ne fais pas normalement ce genre de choses.

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

12
eddie_cat
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, c'est à cela que sert l'option Script de la plupart des boîtes de dialogue - elle vous montrera quel script SSMS aurait exécuté :

enter image description here

18
Aaron Bertrand

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