作者:拍友2502940977 | 来源:互联网 | 2023-05-18 14:40
一、问题描述为了防止密码泄露,每个月需要人工更换一次admin管理员用户的密码,在项目交接时领导提出建议每日更换一次密码且不用人工修改,类似于动态密码,按照指定规则生成密码,只要知道生
一、问题描述
为了防止密码泄露,每个月需要人工更换一次admin管理员用户的密码,在项目交接时领导提出建议每日更换一次密码且不用人工修改,类似于动态密码,按照指定规则生成密码,只要知道生成密码规则的人才可以算出密码。这样就节省了人工修改的时间,也防止了忘记修改密码等等问题。
二、解决思路
1.首先想到的是,在sqlserver中添加一个作业,定时执行一段sql语句或存储过程,来完成按照指定规则每日修改密码。
2.接着需要制定一个规则来生成密码,然后对该密码明文进行加密(这里使用MD5加密进行举例)。
三、解决步骤
1.SqlServer中的加密函数hashbytes(),sys.fn_varbintohexstr()将varbinary数据类型转换成字符串
--假如admin123为我们要加密的字符串,这里使用MD5加密方式加密
select hashbytes('MD5','admin123') --0x0192023A7BBD73250516F069DF18B500 varbinary类型
select sys.fn_varbintohexstr(hashbytes('MD5','admin123')) --0x0192023a7bbd73250516f069df18b500 varchar类型
select SUBSTRING(UPPER(sys.fn_varbintohexstr(hashbytes('MD5','admin123'))),3,32) --0192023A7BBD73250516F069DF18B500
2.在存储过程中制定规则加密、修改
USE [DataBaseTest]
GO
/****** Object: StoredProcedure [dbo].[PwdChangeEveryday] Script Date: 2017/6/19 14:47:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
-- Create date:
-- Description:
-- =============================================
ALTER PROCEDURE [dbo].[PwdChangeEveryday]
-- Add the parameters for the stored procedure here
AS
declare @NewPwd varchar(100)
declare @GuiZe varchar(100)
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
select @GuiZe=convert(varchar(100),GETDATE(),112)+'suibianzuhea'--此处的规则就是取当天的日期然后加上一个字符串 例如20170619suibianzuhea
select @NewPwd= SUBSTRING(UPPER(sys.fn_varbintohexstr( hashbytes('MD5',@GuiZe))),3,32)--加密结果E077DC15B0C52FCEE757DDB9BD66C482
update Peo_Table set Password=@NewPwd where UserName='admin'--更新密码
END
3.新建作业每天定时执行存储过程
1.Sql Server代理>>右键新建作业
2.填写常规相
3.填写步骤
4.填写计划
四、总结