Como mapear um logon para um banco de dados usando T-SQL (não SSMS)

12

Estou escrevendo um programa que exige que eu atribua todas as permissões e tudo no código. Fiquei preso nesta parte:

insira a descrição da imagem aqui

Eu só quero fazer o equivalente a clicar na pequena caixa em "Mapa" do banco de dados msdb e atribuir esse usuário à função SqlAgentUser. Eu preciso de um usuário para poder adicionar / editar tarefas do SQL Server Agent. Posso acertar as configurações usando o SSMS, mas não consigo descobrir como fazê-lo em SQL bruto.

Eu olhei para ALTER LOGIN , mas eu não estou vendo nada que faz o que eu preciso. Eu suspeito que simplesmente não conheço os termos corretos para o Google. Normalmente não faço esse tipo de coisa.

Qualquer ajuda é muito apreciada!

eddie_cat
fonte
3
Você pode "gerar script" que acho que o ajudará em projetos futuros. Na parte superior da tela.
Racer SQL
11
@RafaelPiccinelli oh meu Deus, isso é tão útil! Eu nem percebi isso lá em cima! Obrigado!
eddie_cat
Eu sou muito ruim em códigos, isso me ajuda muito.
Racer SQL

Respostas:

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

Além disso, para referência futura, sempre que você souber fazer algo na interface do usuário, mas não em um script, é para isso que serve a Scriptopção na maioria das caixas de diálogo - mostrará qual script o SSMS teria executado:

insira a descrição da imagem aqui

Aaron Bertrand
fonte
3

Se você deseja alterar o banco de dados \ default atual para outro, tente:

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

Agora, crie um usuário para o login acima criado

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

E agora você pode atribuir funções ao usuário de criação acima para o login, como abaixo:

use <dbname>
exec sp_addrolemember 'db_owner', '<username>';
KASQLDBA
fonte
3
Dos documentos :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
Então, devo alterar o banco de dados padrão toda vez que quiser fazer alguma coisa com esse usuário no msdb? Na janela acima, parece que você pode ter mais de um banco de dados associado a um usuário por vez ... isso está errado?
eddie_cat
@eddie_cat Não, neste caso, não vejo motivo para alterar o banco de dados padrão, a menos que você queira que esse usuário sempre se conecte a determinado banco de dados por padrão.
Aaron Bertrand
Para criar usuário para o login; a sintaxe correta é a seguinte: ------------------------------------------- ------------------------------ USE [DatabaseName] VAI CRIAR USUÁRIO [UserName] PARA LOGIN [LoginName] GO
Kundan Dasange