启用xp_cmdshell
EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'xp_cmdshell', 1;
GO
RECONFIGURE;
GO
禁用xp_cmdshell
EXECUTE sp_configure 'xp_cmdshell', 0;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'show advanced options', 0;
GO
RECONFIGURE;
GO
SQL Server管理员(sysadmin角色)可以启用禁用xp_cmdshell , 也可以任意调用xp_cmdshell:
【SQL Server中xp_cmdshell权限的管理】exec xp_cmdshell 'whoami'
文章插图
能过以上xp_cmdshell调用我们发现 , 管理员实际在windows执行whoami命令时 , 使用的当前账号是nt servicemssqlserver , 也就是mssqlserver的服务账号
由于的xp_cmdshell能直接调用windows程序 , 危险程度极高 , 因为我们通常都是禁用xp_cmdshell功能 , 需要时可以临时开启 , 用完立即关闭 。
SQL Server普通用户是否可以启用xp_cmdshell呢?我们接着测试一下:
文章插图
因为普通SQL Server账号并不具有启用或禁用xp_cmdshell的权限 , 只有拥有sysadmin和serveradmin角色的用户才有权限启用或禁用xp_cmdshell
启用xp_cmdshell , 我们需要调用xp_cmdshell
文章插图
普通SQL Server账号并不具有xp_cmdshell的执行权限 , 因此需要授予用户的xp_cmdshell执行权限
use master
create user gg;
grant execute on sys.xp_cmdshell to gg;
文章插图
授于系统项的权限需要在master数据库 , 因此必须切换到master数据库
授权完后调用xp_cmdshell
文章插图
发现普通SQL Server账号还是无法调用xp_cmdshell , 需要配置代理账号 , 其实这个代理账号就是windows账号 , 当你在SQL Server中调用xp_cmdshell时 , 它将以这个代理账号(windows账号)在windows中执行相关命令 。我在windows创建了一个普通本地账号(anlie , 密码为00000) , 当然也可以是域账号 。
文章插图
在SQL Server中启用代理账号
exec sp_xp_cmdshell_proxy_account 'danganoldanlie','0000'
文章插图
再调用xp_cmdshell , 发现已使用代理账号执行相关命令了
文章插图
使用域账号作为代理账号
文章插图
文章插图
当授予该SQL Server账号sysadmin角色时
推荐阅读
- Java中如何去创建一个线程池?
- Golang中如何判断两个Slice是否相等?
- mysql中的高级连接查询
- MySQL无法启动的可能原因和解决方法!MySQL启动失败处理技巧!
- 数据中心结构化布线指南
- 在 SpringBoot 中使用 Spring AOP 实现接口鉴权
- Vue 3现实生活中的过渡和微互动
- 第八批集采拟中选药品平均降价56% 预计每年可省167亿元
- 中国八大菜系是哪八个?
- 滴滴出行|中年失业,除了跑外卖和开滴滴,还有什么选择?