关于不能更改sql密码的问题

playbmj0525 2010-10-14 11:20:21
公司的sql服务器不知怎么了,不能手工备份数据库,不能更改sa的密码,两个问题报同一个错误如下:

无法装载 DLL Microsoft提示您请误随便操作SQL管理密码 以免对起数据库造成不必要

数据库还不能重装。。晕死啊,请大家帮忙看看研究下啊,急死人了,,谢谢!
...全文
1105 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lybingyu 2010-12-21
use master

go

--检查xp_cmdshell是否被篡改

select * from master..syscomments where object_name(id)='xp_cmdshell' and text<>'xplog70.dll'

go

--检查其他存储过程是否被篡改

select object_name(id), * from master..syscomments where object_name(id) in


('xp_getfiledetails','xp_availablemedia','xp_dirtree','xp_fixeddrives','xp_s
ubdirs',
'xp_fileexist','xp_get_tape_devices','sp_MSgetversion','xp_enumdsn','xp_regr
ead','xp_regwrite','xp_regdeletevalue',
'xp_regaddmultistring','xp_regremovemultistring','xp_regenumkeys','xp_regenu
mvalues','xp_regdeletekey','xp_instance_regread',
'xp_instance_regwrite','xp_instance_regdeletevalue','xp_instance_regaddmulti
string','xp_instance_regremovemultistring',
'xp_instance_regenumkeys','xp_instance_regenumvalues') and text <>N'xpstar.dll'
go
--发现xp_cmdshell被篡改,执行下面语句改回来
--drop procedure xp_cmdshell
--go
--exec sp_addextendedproc N'xp_cmdshell', N'xplog70.dll'
--go
--然后执行下面语句验证xp_cmdshell是否正确
--xp_cmdshell 'dir c:\'
--如果该语句异常,还有可能sql server服务的启用账户(一般情况下是system)没有
访问system32\cmd.exe文件的权限,加上权限即可


--发现其他存储过程被篡改,执行下面语句
--drop procedure 存储过程名称
--go
--exec sp_addextendedproc N'存储过程名称', N'xpstar.dll'

--如果sp_password过程也被修改通过以下方法更新

use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go

drop sp_password
--找一个正确有过程代码,创建改密码过程.
create procedure sp_password
@old sysname = NULL, -- the old (current) password
@new sysname, -- the new password
@loginame sysname = NULL -- user to change password on
as
-- SETUP RUNTIME OPTIONS / DECLARE VARIABLES --
set nocount on
declare @self int
select @self = CASE WHEN @loginame is null THEN 1 ELSE 2 END

-- RESOLVE LOGIN NAME
if @loginame is null
select @loginame = suser_sname()

-- CHECK PERMISSIONS (SecurityAdmin per Richard Waymire) --
IF (not is_srvrolemember('securityadmin') = 1)
AND not @self = 1
begin
dbcc auditevent (107, @self, 0, @loginame, NULL, NULL, NULL)
raiserror(15210,-1,-1)
return (1)
end
ELSE
begin
dbcc auditevent (107, @self, 1, @loginame, NULL, NULL, NULL)
end

-- DISALLOW USER TRANSACTION --
set implicit_transactions off
IF (@@trancount > 0)
begin
raiserror(15002,-1,-1,'sp_password')
return (1)
end

-- RESOLVE LOGIN NAME (disallows nt names)
if not exists (select * from master.dbo.syslogins where
loginname = @loginame and isntname = 0)
begin
raiserror(15007,-1,-1,@loginame)
return (1)
end

-- IF non-SYSADMIN ATTEMPTING CHANGE TO SYSADMIN, REQUIRE PASSWORD (218078) --
if (@self <> 1 AND is_srvrolemember('sysadmin') = 0 AND exists
(SELECT * FROM master.dbo.syslogins WHERE loginname = @loginame and isntname = 0
AND sysadmin = 1) )
SELECT @self = 1

-- CHECK OLD PASSWORD IF NEEDED --
if (@self = 1 or @old is not null)
if not exists (select * from master.dbo.sysxlogins
where srvid IS NULL and
name = @loginame and
( (@old is null and password is null) or
(pwdcompare(@old, password, (CASE WHEN xstatus&2048 = 2048 THEN 1 ELSE 0 END)) = 1) ) )
begin
raiserror(15211,-1,-1)
return (1)
end

-- CHANGE THE PASSWORD --
update master.dbo.sysxlogins
set password = convert(varbinary(256), pwdencrypt(@new)), xdate2 = getdate(), xstatus = xstatus & (~2048)
where name = @loginame and srvid IS NULL

-- UPDATE PROTECTION TIMESTAMP FOR MASTER DB, TO INDICATE SYSLOGINS CHANGE --
exec('use master grant all to null')

-- FINALIZATION: RETURN SUCCESS/FAILURE --
if @@error <> 0
return (1)
raiserror(15478,-1,-1)
return (0) -- sp_password

GO

sp_configure 'allow updates',0
go
reconfigure with override
go
回复
playbmj0525 2010-10-15
谢谢啊,可是不是我想要的答案啊,我们是正式的服务器在IDC挂着呢,不能重装啊,难道就没有解决办法吗,高手帮帮忙啊,我菜鸟啊!~~搞了好几天了,也没搞定,谢谢大家!~~
回复
dawugui 2010-10-14
[Quote=引用楼主 playbmj0525 的回复:]
公司的sql服务器不知怎么了,不能手工备份数据库,不能更改sa的密码,两个问题报同一个错误如下:

“无法装载 DLL Microsoft提示您请误随便操作SQL管理密码 以免对起数据库造成不必要”

数据库还不能重装。。晕死啊,请大家帮忙看看研究下啊,急死人了,,谢谢!
[/Quote]
多办数据库损坏了,得重装.参考如下:

/*
标题:SQL Server 2000服务器安装剖析
作者:作者:爱新觉罗·毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-05-05
地点:广东深圳
*/

一、情况说明

sql server 2000以前的版本,例如7.0一般不存在多个版本,只有标准版跟桌面版,用户如果不清楚该装什么版本的话,可按安装上的
安装先决条件指示安装,一般在WIN2000 服务器版上装标准版,其他的系统装桌面版的就可以;而SQL Server 2000安装问题就比较大,时常
见到的问题如下:
1、配置服务器时中断.
2、注册 ActiveX 时中断.
3、显示到100%的时候中断.
4、提示:command line option syntax error, type command /? for help,继续安装,最后在配置服务器的时候出现:无法找到动态链接
SQLUNIRL.DLL于指定的路径……
5、以前进行的程序创建了挂起的文件操作,运行安装程序前,必须重新启动

二、情况1,2,3的解决办法:

提醒:为避免误操作,先备份注册表和数据库进不了SQL Server 2000,可以备份C:Program Files\Microsoft SQL Server\MSSQL\Data
(默认路径)文件夹的文件.
1)、先把SQL Server卸载(卸载不掉也没有关系,继续下面的操作);
2)、把Microsoft SQL Server文件夹整个删掉;
3)、运行注册表,删除如下项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLSERVER
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLSERVERADHELPER
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server
4)、需要的话就重新启动系统;
5)、重新安装。

另外也可尝试单步运行安装 SQL Server 2000的方法:

1)、放入 SQL Server 2000 光盘.
2)、在"开始"--"运行"键入 "F:\x86\setup.exe k=dbg" (F是光盘)

注意:
1)、不同的操作系统支持的SQL Server 2000版本(参见:sql server 2000 各版本的区别简介及版本情况查询一文)。
Windows 2000 Server可以安装SQL Server 2000的任何版本.
Windows 2000 Professional只能安装SQL Server 2000的个人版、开发版、评估版、MCDE
2)、SQL Server 2000各版本以及对软硬件的要求(参见:SQL Server 2000 的硬件和软件安装要求一文)。

三、情况4的解决办法

因为安装文件的路径(完整路径)里有中文.
比如 c:\SQLSERVER中文企业版\
改成 c:\SQLSERVER\

四、情况5的解决办法

1)、重启机器,再进行安装,如果发现还有该错误,请按下面步骤;
2)、在开始--运行中输入regedit;
3)、到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager位置找到
PendingFileRenameOperations项目,并删除它。这样就可以清除安装暂挂项目。
4)、选择文件--倒出,保存;
5)、在右边窗口右击PendingFileRenameOperations,选择删除,然后确认;
6)、重启安装,问题解决

五、如果问题依旧,试试先修复操作系统:

命令提示符下执行: sfc /scannow 。

最后的方法:换 Windows 2000 安装盘和 SQL Server 2000 安装盘,有时候问题的原因很奇怪,有人曾更换了一个电源就解决了问题。

1)、先卸载您的 SQL Server 2000,必要的时候删除 Program Files\Microsoft SQL Server 文件夹;
2)、打开注册表;
在"开始"--"运行"键入"regedit"
3)、按下列顺序点击打开;
+ HKEY_LOCAL_MACHINE
+ SOFTWART
+ Microsoft
+ Windows
+ CurrentVersion
+ Setup
+ ExceptionComponents
4)、将 ExceptionComponents 下面的文件夹全部删除;
如 {60BFF50D-FB2C-4498-A577-C9548C390BB9}
{60BFF50D-FB2C-4498-A577-C9548C390BB9}
{60BFF50D-FB2C-4498-A577-C9548C390BB9}
{60BFF50D-FB2C-4498-A577-C9548C390BB9}
5)、重新启动;
6)、重新安装 SQL Server 2000 。

六、其他说明

1)、Windows目录中的Sqlstp.log文件,该文件列出了安装程序所执行的操作的详细信息,并包含安装期间遇到的所有错误。
通过检查该文件,可以详细了解安装在什么地方失败、为什么失败。

2)、SQL安装的时的错误信息保存在一个叫Errorlog的日志文件中,默认情况下该文件位于Program Files\Microsoft SQL Server\Mssql\Log
目录中。该错误日志包含安装程序试图启动SQL-Server时SQL-Server所遇到的错误,这些信息可以帮助您深入检查错误原因。

3)、需要检查的另一个组件是Microsoft数据访问组件(MDAC)安装程序,它作为SQL-Server2000安装程序的一部分启动。
SQL-Server2000安装程序会安装MDAC2.6。MDAC安装程序会创建名为Dasetup.log的单独的日志文件;您可以查看此日志文件并确保MDAC
安装程序没有出现问题。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-10-14 11:20
社区公告
暂无公告