社区 笛佛软件 搜索 帮助
登录 注册
论坛首页 >> SQL Server/IT技术 疑难 >> sql server 错误2812 :未能找到存储过程'sp_password' 解决方法!
sql server 错误2812 :未能找到存储过程'sp_password' 解决方法!
warwolf
头像
等级: 总书记 总书记
身份: 管理员 管理员
主题: 11
帖子: 103
经验: 1000262
注册时间: 2011-04-01
最后登陆: 2014-07-11
资料 消息 邮件 引用 1楼

现在有很多自动扫描1433端口的软件,会破坏sp_password标。造成在修改SA密码的时候出现2812错误

下边是解决代码,用WINDOWS身份验证登陆到SQL SERVER的查询工具。复制--粘贴--执行就OK拉。

 

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

 

以上代码在SQL 2000 SP4上测试通过,在2005暂没测试。

签名
双休日值班时间:早上10点----下午17点。拨打公司服务电话13757155440,0571-88223309/88223317-8002,。公司用户论坛网址:http://bbs.differsoft.com 欢迎用户在使用软件时进行交流和学习,同时可以关注我们软件更新的最新公告!客服QQ:345147914
Time:2012/3/12 13:37:23
davidwrk
头像
等级: 科长 科长
身份: 会员 会员
主题: 0
帖子: 1
经验: 2
注册时间: 2012-06-16
最后登陆: 2012-06-16
资料 消息 邮件 引用 2楼

你好。楼主。

我遇到了这种报错问题,网上搜索了下发现了这个贴。方法管用,但是发现只是暂时性的。

 请问有没有什么办法能够彻底的解决这种问题,话说断口扫描或者什么的,我用的瑞星安全套件 并没有提示警告 有网络威胁啊 ~ 本人小白 实在是不懂多少 只是略微用 sql 

签名
Time:2012/6/16 17:05:33
awei
头像
等级: 总书记 总书记
身份: 管理员 管理员
主题: 100
帖子: 805
经验: 24133
注册时间: 2007-11-29
最后登陆: 2015-01-14
资料 消息 邮件 引用 3楼
1433因是默认的,建议修改掉。
签名
Time:2012/8/19 21:51:43
陈流霜飞
头像
等级: 科长 科长
身份: 会员 会员
主题: 0
帖子: 38
经验: 76
注册时间: 2013-03-18
最后登陆: 2013-03-18
资料 消息 邮件 引用 4楼

*********该贴作者被锁定,内容自动屏蔽*********
签名
Time:2013/3/18 9:51:55
[回复]
表情
内容*
附件 >>上传附件 (附件格式为:jpg,gif,png,rar,zip)
发表回复需要[登陆]
广告