日期:2014-05-17  浏览次数:20586 次

sql server表字段加密问题
通过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
------解决方案--------------------
引用:
不想在应用程序中实现,能给个MD5DE加密步骤吗?感谢


看看这个:
-- =============================================
-- 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)