分类

链接

2012 年 3 月
 1234
567891011
12131415161718
19202122232425
262728293031  

近期文章

热门标签

新人福利,免费薅羊毛

现在位置:    首页 > SQL Server > 正文
共享办公室出租
SQL Server 2008代理详解
SQL Server 暂无评论 阅读(2,442)

SQL Server Agent代理 详解

在SQL Server 2008中的授权模型的一个最好的例子就是SQL Server Agent。你可以定义许多常常与Windows登陆关联的凭证,链接到具有必要的权限的用户以执行一个或多个SQL Server Agent步骤。然后一个SQL Server Agent 代理会使用一个工作步骤链接这个凭证来提供必要的权限。

这为下面的最小权限的主体提供了一个细粒度的方法:授予一个工作步骤所需的权限,除此以外没有其它权限。你可以创建任何数目的代理,将它们的每一个同一个 或多个SQL Server Agent子系统关联起来。这是对SQL Server 2000中的所有强大的代理帐户的完全约束,它使得用户可以在任何SQL Server Agent子系统中创建工作步骤。

注意 当你对一个SQL Server 2000服务器进行升级的时候,会创建一个单独的代理账户,所有的子系统会被分配到这个单独的代理账户上以便现有的工作可以继续运行。在升级之后,创建凭证和代理账户来实现一组更加安全的、更细粒度的代理来保护服务器资源。

图6显示了管理套件中的对象资源管理器和一列SQL Server Agent中可用的子系统。每一个子系统可以有与它关联的一个或多个代理,它们授予这个工作步骤所需的适当的权限。这个scheme的一个例外是 Transact-SQL子系统以模块所有者的权限来执行,这和在SQL Server 2000中是一样的。

在一个新安装的SQL Server 之上,只有System Administrator 角色具有维护SQL Server Agent 工作的权限,管理套件资源管理器中的管理面板只对sysadmins开放。SQL Server 2008具有一些其它的、你可以用来授予多级权限的角色。你可以将用户分配到SQLAgentUser、SQLAgentReaderRole或 SQLAgentOperator 角色,其中的每一个授予逐渐增长的权限级别来创建、管理和运行工作,或是MaintenanceUser 角色,它具有SQLAgentUser的所有的权限和创建维护计划的能力。

sysadmin 角色的成员当然可以在任何子系统中做任何他们想要做的。为了授权给任何其他的用户以使用子系统,要求至少创建一个代理帐户,它可以授权给一个或多个子系 统。图7显示一个代理帐户MyProxy怎样被分配到多个主体上,这里是一个用户和一个角色。这个代理帐户使用一个凭证,这个凭证将它链接到一个帐户,通 常是一个域帐户,它要具有操作系统执行子系统所要求的所有任务所必需的权限。每一个代理可以有一个或多个相关联的子系统,这些子系统授予主体以运行这些子 系统的能力。

下面的代码显示了执行图7所示的scheme所必需的Transact-SQL代码。它一开始创建了一个凭证,一个提供了对具有执行子系统中想要的活动的 权限的操作系统帐户的链接的数据库对象。然后它添加一个代理帐户——MyProxy,这只是一个用于凭证的友好名称。然后,它将这个代理分派到两个首要角 色上,在这里是一个SQL Server登陆和一个定制角色。最后它将这个代理和四个SQL Server Agent子系统的每一个相关联。

CREATE CREDENTIAL MyCredential WITHIDENTITY='MyDOMAIN\user1'GO msdb..sp_add_proxy @proxy_name='MyProxy', @credential_name='MyCredential'GO msdb..sp_grant_login_to_proxy @login_name='MyLogin', @proxy_name='MyProxy'GO msdb..sp_grant_login_to_proxy @login_name='MyRole', @proxy_name='MyProxy'GO sp_grant_proxy_to_subsystem @proxy_name='MyProxy', @subsystem_name='ActiveScripting'GO sp_grant_proxy_to_subsystem @proxy_name='MyProxy', @subsystem_name='CmdExec'GO sp_grant_proxy_to_subsystem @proxy_name='MyProxy', @subsystem_name='ANALYSISQUERY'GO sp_grant_proxy_to_subsystem @proxy_name='MyProxy', @subsystem_name='DTS'GO

SQL Server管理套件提供了对创建凭证和代理的充分支持,如图8所示。它创建了与之前的代码相同的代理。

一个代理不是操作系统中围绕安全的一个方式。如果和代理一起使用的凭证没有在Windows中的权限,例如写到网络上的一个目录中,那么代理也没有这个权 限。你还可以使用一个代理来授予有限的执行权限给xp_cmdshell ,因为它是攻击者所喜爱的一个工具,一旦他们危及一个SQL Server计算机他们就能扩展他们在网络中的范围。这个代理提供了这个保护,因为即使主体具有在网络上的无限的权限,例如域管理员,但是通过代理执行的 任何命令只具有凭证帐户所具有的有限的权限。

 

============ 欢迎各位老板打赏~ ===========

本文版权归Bruce's Blog所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:SQL Server 2008代理详解 | Bruce's Blog

发表评论

留言无头像?