¿Cómo puedo asignar un inicio de sesión a una base de datos usando T-SQL (no SSMS)

12

Estoy escribiendo un programa que requiere que asigne todos los permisos y todo en el código. Me he quedado atascado en esta parte:

ingrese la descripción de la imagen aquí

Solo quiero hacer el equivalente a hacer clic en el pequeño cuadro debajo de "Mapa" para la base de datos msdb y asignar a ese usuario el rol SqlAgentUser. Necesito un usuario para poder agregar / editar trabajos del Agente SQL Server. Puedo obtener la configuración correcta usando SSMS, pero no puedo averiguar cómo hacerlo en SQL sin formato.

He examinado ALTER LOGIN pero no veo nada que haga lo que necesito. Sospecho que simplemente no sé los términos correctos para Google. Normalmente no hago este tipo de cosas.

¡Cualquier ayuda es muy apreciada!

eddie_cat
fuente
3
Puede "generar script" que creo que lo ayudará en futuros proyectos. En la parte superior de la pantalla.
Racer SQL
1
@RafaelPiccinelli ¡Dios mío, que es tan útil! ¡Nunca me di cuenta de eso allá arriba! ¡Gracias!
eddie_cat
Soy muy malo con los códigos, esto me ayuda MUCHO.
Racer SQL

Respuestas:

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

Además, para referencia futura, cada vez que sepa cómo hacer algo en la interfaz de usuario pero no en un script, esta es la Scriptopción en la mayoría de los diálogos: le mostrará qué script habría ejecutado SSMS:

ingrese la descripción de la imagen aquí

Aaron Bertrand
fuente
3

Si desea cambiar la base de datos actual \ predeterminada a una diferente, intente:

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

Ahora, cree un usuario para el inicio de sesión anterior creado

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

Y ahora puede asignar roles al usuario de creación anterior para el inicio de sesión de la siguiente manera:

use <dbname>
exec sp_addrolemember 'db_owner', '<username>';
KASQLDBA
fuente
3
De los 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
Entonces, ¿debería cambiar la base de datos predeterminada cada vez que quiera hacer algo con este usuario en msdb? En la ventana de arriba parece que puede tener más de una base de datos asociada a un usuario a la vez ... ¿eso está mal?
eddie_cat
@eddie_cat No, no veo ninguna razón en este caso para cambiar la base de datos predeterminada, a menos que desee que ese usuario siempre se conecte a cierta base de datos de forma predeterminada.
Aaron Bertrand
Para crear un usuario para el inicio de sesión; La sintaxis correcta es la siguiente: ------------------------------------------- ------------------------------ USE [DatabaseName] GO CREAR USUARIO [UserName] PARA INICIAR SESIÓN [LoginName] GO
Kundan Dasange