如何使用T-SQL(不是SSMS)将登录名映射到数据库


12

我正在编写一个程序,要求我分配代码中的所有权限和所有内容。我陷入了这一部分:

在此处输入图片说明

我只想做相当于单击msdb数据库的“地图”下的小框,然后将该用户分配给SqlAgentUser角色的等效操作。我需要一个用户才能添加/编辑SQL Server代理作业。我可以使用SSMS正确进行设置,但是我一生都无法弄清楚如何在原始SQL中进行设置。

我已经研究过ALTER LOGIN,但是没有看到任何可以满足我需求的东西。我怀疑我只是不知道Google的正确用语。我通常不会做这种事情。

任何帮助深表感谢!


3
您可以“生成脚本”,我认为它将在将来的项目中为您提供帮助。在屏幕顶部。
Racer SQL

1
@RafaelPiccinelli哦,我的天哪太有帮助了!我什至没有注意到那里!谢谢!
eddie_cat 2015年

我的代码真的很烂,这对我有很大帮助。
Racer SQL

Answers:


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

另外,为了将来参考,每当您知道如何在UI中而不是在脚本中执行某些操作时,这就是Script大多数对话框中的选项-它会向您显示SSMS将执行的脚本:

在此处输入图片说明


3

如果要将当前\默认数据库更改为另一数据库,请尝试:

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

现在,为上面创建的登录名创建一个用户

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

现在,您可以为上述登录用户分配角色,如下所示:

use <dbname>
exec sp_addrolemember 'db_owner', '<username>';

3
来自文档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.
亚伦·伯特兰

因此,每次我想对该用户在msdb中执行任何操作时,都应该更改默认数据库吗?在上面的窗口中,您似乎一次可以有多个数据库与一个用户关联……是吗?
eddie_cat

@eddie_cat不,在这种情况下,我认为没有理由更改默认数据库,除非您希望该用户默认始终连接到特定数据库。
亚伦·伯特兰

为登录创建用户;正确的语法如下:------------------------------------------- ------------------------------使用[DatabaseName] GO创建用户[UserName]进行登录[LoginName] GO
Kundan Dasange
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.