通过CISCO ACS外部数据库(ODBC)的连接,已将ACS的内部数据库指向到SQL SERVER 2000。在SQL SERVER2000 建表(USERS),通过存储过程 (CSNTAuthUserPap),实现用户的验证。
表(USERS)如下:
Field Type
CSNTusername String
CSNTpassword String
CSNTresult Integer
CSNTgroup Integer
CSNTacctInfo String
CSNTerrorString String
存储过程 (CSNTAuthUserPap)如下:
if exists
(select * from sysobjects
where id = object_id ('dbo.CSNTAuthUserPap') and sysstat & 0xf = 4)
drop procedure dbo.CSNTAuthUserPap
GO
CREATE PROCEDURE CSNTAuthUserPap @username varchar(64), @pass varchar(255)
AS
SET NOCOUNT ON
IF EXISTS( SELECT CSNTusername FROM users
WHERE CSNTusername = @username AND csntpassword = @pass )
SELECT 0,csntgroup,csntacctinfo, 'No Error'
FROM users
WHERE CSNTusername = @username
ELSE
SELECT 3,0,'odbc','ODBC Authen Error'
GO
GRANT EXECUTE ON dbo.CSNTAuthUserPap TO ciscosecure
GO
问题:目前users表中的字段(CSNTpassword)是明文显示的,如何将这个字段改为加密显示,请提供方法,万分感谢!!!
------解决方案--------------------
这个建议你在应用程序中,对这个密码进行加密,然后再传给sql server 后insert,因为用sql server来做加密,性能肯定不如应用程序。
另外,你可以使用md5加密算法来加密你的password
------解决方案--------------------
看看这个:
-- =============================================
-- Author: peterlu
-- Create date: 2008-6-11
-- Description: 实现MD5加密算法,返回对字符串的加密结果串
-- =============================================
create FUNCTION [dbo].[MD5]
(
-- 源字符串
@src varchar(255),
-- 加密类型(16/32)
@type int = 32
)
RETURNS varchar(255)
WITH EXECUTE AS CALLER
AS
BEGIN
-- 存放md5加密串(ox)
DECLARE @smd5 varchar(34)
-- 加密字符串
SELECT @smd5 = sys.fn_VarBinToHexStr(hashbytes('MD5', @src));
IF @type=16
SELECT @smd5 = SUBSTRING(@smd5,11,16) --16位
ELSE
SELECT @smd5 = SUBSTRING(@smd5,3,32) --32位
-- 返回加密串
RETURN @smd5
END
--最后,采用触发器的方法,实现对用户密码的自动加密。代码如下:
-- =============================================
-- Author: peterlu
-- Create date: 2008-6-11
-- Description: 实现对用户密码进行MD5加密
-- =============================================
CREATE TRIGGER trg_EncryptPwd
ON Users
AFTER INSERT,UPDATE
AS
BEGIN
IF(UPDATE(Password))
BEGIN
DECLARE @uid int
DECLARE @pwd varchar(32)
-- 获取用户ID和密码
SELECT @uid=UserID,@pwd=Password FROM inserted
-- 更新密码
UPDATE Users SET Password = dbo.MD5(@pwd,16) WHERE UserID = @uid
END
END
GO
------解决方案--------------------
你可以参考这个:
sql MD5
http://hi.baidu.com/chengchunqian/item/5027f4fdc6ea0e16fe3582f2
------解决方案--------------------
http://blog.csdn.net/dba_huangzj/article/details/7673714
http://blog.csdn.net/dba_huangzj/article/details/7679136
------解决方案--------------------
mD5加密寫在前端即可,MssQL還是專註數據存取分析,讓它作字符串處理雖能行,但效率比c#等處理會慢些.