在Windows操作系统上,每个服务都有一个启动的账号,这个账号的权限决定了这个服务可以访问那些资源。默认情况下,SQL SERVER可能使用system这个账号作为服务启动账号。我们经常在一些文章中看到说使用system作为SQL SERVER服务的启动账号不安全,这说法没错,确实不安全,下面的实验将验证这一点。
配置:
Windows 2003 enterprise 32位或者64位
SQL SERVER 2005 enterprise 32位或者64位
需要有sa权限的用户,这里使用sa
通过SQL SERVER***操作系统,基本上是通过SQL SERVER的
xp_cmdshell实现的。这是这个程序可以让用户通过SQL SERVER执行命令行程序。前面说过启动服务账号的权限决定了这个服务有哪些权限,如果启动SQL SERVER服务的账号有创建Windows帐号的权限,那么就能通过SQL SERVER创建账号。
首先执行下面的代码将
xp_cmdshell开启:
- use master
- go
- sp_configure 'show advanced options',1;
- --使得能够更改高级配置
- go
- reconfigure
- go
- sp_configure 'xp_cmdshell',1;
- --打开xp_cmdshell扩展
- go
- reconfigure
- go
然后到SQL SERVER的SQL Server 配置管理器管理去检查一下你的SQL SERVER服务是用什么账号启动,如下图所示。
现在执行下面的代码:
- xp_cmdshell 'net user abc1 a9F /add'
这将会在你的操作系统中添加一个名为abc1密码为a9f的用户,到中看看就知道有没有了:
然后依次使用不同的服务账号来测试,看那用那些账号启动SQL SERVER会导致用户使用
xp_cmdshell往操作系统中加账号。建议建立一普通user,然后使用这个账号启动SQL SERVER服务。
另外如果你使用服务管理去更改SQL SERVER的启动账号,可能导致你的SQL SERVER无法启动,而是用SQL Server 配置管理器去更改启动账号时,SQL Server 配置管理器会将一些目录的权限也配置好,避免账号没有写某些目录的权限。
xp_cmdshell在SQL SERVER 2005中很难被删掉。
转载于:https://blog.51cto.com/liuxinya/354682