当前位置:首页 » 编程语言 » sql2000错误2812
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql2000错误2812

发布时间: 2022-09-09 00:53:29

A. 什么原因造成sql2000数据库在企业管理器中修改sa密码的时提示:错误2812 未能找到储存过程 sp_password'

原因可能是由于黑客木马侵入,将sa密码更改,并删除了此存储过程,由此阻碍对密码的修改。解决方案就是重建这个存储过程。
操作过程如下:打开“企业管理器”在系统数据库“master”中找到“存储过程”,然后右击“新建存储过程”。将完整代码如下:
create procere 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

新建好后重新修改下密码即可。

B. 求一懂SQL2000的高手解答一下这个SQL语句为什么运行不了

declare @s varchar(2000)
set @s='select top 10 * from users where uid not in (select top '+rtrim(10*(1-1))+' username from users ORDER BY uid) ORDER BY uid'
exec (@s)

加两括号,而且2000不支持top (n),改为 top n

C. "修改SQL中SA密码,提示错误2812,未能找到存储过程"SA-PASSWORD",请问如何修改",这个问题你后面是如何解决

ALTER LOGIN sa WITH PASSWord = 'xxx'

D. sql2000的sa密码每天重启电脑都被篡改!改的时候2812错误!2812错误我知道怎么解决!

中病毒sa密码被篡改然后删除修改密码的存储过程,你查询下sp_password是不是不存在了,你可以先备份数据库(为了避免数据丢失),然后新建改存储过程(见下面代码)。修改为SA密码后,查杀下病毒,实在不行重装系统,重新附加数据库或者用备份还原

--SQL代码开始
sp_configure'allowupdates',1
RECONFIGUREWITHOVERRIDE
go
usemaster
go
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[sp_password]')andOBJECTPROPERTY(id,N'IsProcere')=1)
dropprocere[dbo].[sp_password]
go
createproceresp_password
@oldsysname=NULL,--theold(current)password
@newsysname,--thenewpassword
@loginamesysname=NULL--usertochangepasswordon
as
--SETUPRUNTIMEOPTIONS/DECLAREVARIABLES--
setnocounton
declare@selfint
select@self=CASEWHEN@loginameisnullTHEN1ELSE2END
--RESOLVELOGINNAME
if@loginameisnull
select@loginame=suser_sname()
--CHECKPERMISSIONS()--
IF(notis_srvrolemember('securityadmin')=1)
ANDnot@self=1
begin
dbccauditevent(107,@self,0,@loginame,NULL,NULL,NULL)
raiserror(15210,-1,-1)
return(1)
end
ELSE
begin
dbccauditevent(107,@self,1,@loginame,NULL,NULL,NULL)
end
--DISALLOWUSERTRANSACTION--
setimplicit_transactionsoff
IF(@@trancount>0)
begin
raiserror(15002,-1,-1,'sp_password')
return(1)
end
--RESOLVELOGINNAME(disallowsntnames)
ifnotexists(select*frommaster.dbo.sysloginswhere
loginname=@loginameandisntname=0)
begin
raiserror(15007,-1,-1,@loginame)
return(1)
end
--IFnon-,REQUIREPASSWORD(218078)--
if(@self<>1ANDis_srvrolemember('sysadmin')=0ANDexists
(SELECT*FROMmaster.dbo.sysloginsWHEREloginname=@loginameandisntname=0
ANDsysadmin=1))
SELECT@self=1
--CHECKOLDPASSWORDIFNEEDED--
if(@self=1or@oldisnotnull)
ifnotexists(select*frommaster.dbo.sysxlogins
wheresrvidISNULLand
name=@loginameand
((@oldisnullandpasswordisnull)or
(pwdcompare(@old,password,(CASEWHENxstatus&2048=2048THEN1ELSE0END))=1)))
begin
raiserror(15211,-1,-1)
return(1)
end
--CHANGETHEPASSWORD--
updatemaster.dbo.sysxlogins
setpassword=convert(varbinary(256),pwdencrypt(@new)),xdate2=getdate(),xstatus=xstatus&(~2048)
wherename=@loginameandsrvidISNULL
--,TOINDICATESYSLOGINSCHANGE--
exec('usemastergrantalltonull')
--FINALIZATION:RETURNSUCCESS/FAILURE--
if@@error<>0
return(1)
raiserror(15478,-1,-1)
return(0)--sp_password
GO
sp_configure'allowupdates',0
RECONFIGUREWITHOVERRIDE
--SQL代码结束

E. 修改SQL中SA密码,提示错误2812,未能找到存储过程"SA-PASSWORD",如何修改

你进入数据库,然后点数据库里有个安全,然后找到一个用户名SA,接着点开,然后有个强制修改密码,你直接输两遍你要输入的密码,就可以了,然后断开数据库,重新连接,注意服务器,这个服务器是你刚刚登陆进去修改的服务器,然后用用户名密码登陆,试试吧。

F. 为什么SQL2005在新建复制找不到存储过程提示错误:2812 的解决方法

一台服务器重装系统后,用附加表再配置同步复制的时候出错:

sql server 无法创建发布 找不到存储过程 错误 2812

在SQL SERVER 2005中,有数据库DB1,在A服务器上。由于要更换服务器,要把数据库DB1迁移到B服务器上。而DB1是用于同步复制的。粗心的你没有把同步复制(发布和订阅)删掉,就直接把DB1.mdf和DB1_log.ldf两个文件到B服务器上附加。附加成功了,原来的程序都能连接上,你以为大功告成。但是,几天过后,当你想把服务器重新同步复制,以作实时备份时,你发现自己的倒霉时刻到了。SQL SERVER 2005 像病了一样,只提示:“找不到存储过程’’…错误:2812”。

如果你的经历与以下的不完全一致,那么这篇文章可能也值得你参考。

但如果你的经历恰好一样,而且你在Google或Bai上苦寻答案而不觅,那么,这篇文章或者能帮你一把。

如果数据库迁移后,数据并没有更新过。那么你的想法是把这个该死的数据库分离,然后再重新把去掉同步复制的干净的数据库迁移过来。但是,如果你的新数据库已经投入生产,那么,请参考我的方法:

打开B服务器上的DB1数据库的系统表,你会发现有12个表在里面。这12个表就是因同步复制而产生的,包括:

表/视图

有记录

复制必需

Mspeer_lsns

Mspeer_request

Mspeer_response

Mspub_identity_range

Sysarticlecolumns





Sysarticles





Sysarticlesupdates



syspublications





Sysreplservers



Sysschemaarticles



Syssubscriptions





systranschemas

sysextendedarticlesview



问题就出现在这里了。这12 个系统表和1个视图是因同步复制而生的,如果没有发生同步复制,他们是不会出现的。我们把mdf和ldf文件直接迁移过来,数据库里面的这些系统表和视图也随之而来了。

不能简单的把这12个系统表和1个视图删掉,这样同样不行。在经过了长时间的摸索后,我发现了问题的真正所在。

我们看一下系统表 sysreplservers的内容,有两列:

Srvname

Srvid

旧服务器名称

0

终于找到了问题所在了。我们把该表的记录删除。

然后随便发布一次。

再把该发布删除。

至此,该数据库中的陈旧同步复制信息已经去除,数据库重新变得洁净可爱

G. sql数据库个人版和服务器版的本质区别在哪里 我sql 2000 更改sa密码的时候报错2812未能找到存储过程,

如果你在master下还找不到该存储过程,那把下面的代码在master库运行一下即可:
create procere 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