关于xp_cmdshall开启特定账号执行的相关设置步骤

上周业务部门一名同事联系我说希望在DB服务器上启用xp_cmdshell来调bat.

我第一反应就是这绝对不能开啊.当场回绝掉了.(如果这么顺利就不会有这篇博客了...)

后续发生的事情我就不多说了,反正最后确定要开,但是需要控制相应的权限!!

之前没有太多关注这个系统存储过程,所以翻MSDN的说明大概看了一下.

https://msdn.microsoft.com/zh-cn/library/ms175046.aspx

有戏啊~~

可以用某个windows账号来模拟执行cmdshell的系统账号,给这个账号设置相应权限就好了.

于是开搞.

步骤按照官方文档的来就好.

第一步是新增windows账户:

我给的windows账号只给了user角色.由于他们的bat文件需要有执行某个应用程序的权限,而此应用程序需要写入部分文件在磁盘上.

所以给相应的程序和目录都开了执行权限和写入权限(此次特别注意,可以写入的目录千万不能有执行权限,否则很危险...)

windows账号开设完毕后需要配置为服务器代理账户.

第二步配置服务器代理账户:

有2个办法.

第一个办法是执行sql语句:

EXEC sp_xp_cmdshell_proxy_account '**************\**************', '*********************';
GO

 

第二个办法用SSMS进行配置:

  

 

第三步,需要将需要执行xp_cmdshell的SQL SERVER账号映射到master库中

USE [master]
GO
CREATE USER [test] FOR LOGIN [test]
GO

 

第四步,给指定的SQL SERVER账号赋予执行xp_cmdshell的权限

USE [master]
GO
GRANT EXEC ON xp_cmdshell TO [test]
GO

 

完成后使用test账号连接数据库,执行如下测试代码:

xp_cmdshell 'whoami.exe'
GO

显示如下信息表明正常:

更换SQL SERVER账号登陆后执行上述测试代码报错.

 

 

最后说一句.

上述工作的前提是你要开启xp_cmdshell(为了安全,sql server 2005之后默认均不开启)

开启方法:

EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'xp_cmdshell', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'show advanced options', 0;
GO
RECONFIGURE;
GO

 

posted @ 2016-01-13 19:05  十字军  阅读(668)  评论(0编辑  收藏  举报