当前位置: 代码迷 >> Sql Server >> sql server表字段加密有关问题
  详细解决方案

sql server表字段加密有关问题

热度:10   发布时间:2016-04-24 19:15:36.0
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)    --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#等處理會慢些.
  相关解决方案