在全新安装ERP软件或新建账套操作,完成最后一步设置点击确定按钮时,系统提示:
数据库升级失败!SQL文件不全或SQL语句有误!
错误描述:SQL Server阻止了对组件‘xp_cmdshell’的过程‘sys.xp_cmdshell’的访问。因为此组件已作为此服务嚣安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure启用‘xp_cmdshell’。有关启用‘xp_cmdshell’的详细信息,请参阅SQL Server 联机丛书中的"外围应用配置器"。
【分析】:
查询网络资料以及SQL帮助可知,xp_cmdshell可以让系统管理员以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出,是一个功能非常强大的扩展存贮过程。一般情况下,xp_cmdshell对管理员来说也是不必要的,xp_cmdshell的消除不会对Server造成任何影响。在执行某些SQL的操作时,SQL系统需要此服务开启,如本例中的新建账套的操作。
【处理】:
1、在查询分析器中执行命令
通过查询分析器,选择Master数据库,然后执行以下SQL内容:
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go
2、新建账套
完成上述操作后,再进行账套新建,即可成功了。
说明事项:
1)、Xp_cmdshell是sql数据库master库下面的系统存储过程,是进入操作系统的最佳捷径,也是数据库留给操作系统的一个大后门。由于在授予用户执行 xp_cmdshell 的权限后,就允许用户在SQL中通过xp_cmdshell执行其他的操作;这时如果sa密码为空或者很容易被破解,则攻击者就会利用xp_cmdshell来执行任何command命令来操作您的computer。
2)、如果你不需要扩展存储过程xp_cmdshell,请把它去掉,可以使用以下SQL语句实现:
use master
sp_dropextendedproc 'xp_cmdshell'
3)、如果你需要这个存储过程,可以使用以下语句把它恢复过来:
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
前提是最好在sql server用户管理下将各权限级别高的用户做成强壮密码。
4)如果需要关闭xp_cmdshell,则请执行以下SQL:
exec sp_configure 'xp_cmdshell', 0
reconfigure
exec sp_configure 'show advanced options', 0
reconfigure
特别提示:本例涉及数据库操作,适用于有数据库基础者,其他人请谨慎使用。更多关于xp_cmdshell的内容,可以查询SQL帮助或网上搜索资料。