sql server中怎么给数据库表中的用户密码加密
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server中怎么给数据库表中的用户密码加密相关的知识,希望对你有一定的参考价值。
1、首先我们电脑上要安装有SQL Server,然后要准备一个MDF数据库文件。打开SQL Server。
2、点开数据库这一级,右键点击数据库然后选择-所有任务-附加数据库-附加数据库。
3、在弹出界面上点击…按钮,然后找到准备好的MDF数据库文件的存放位置。
4、找到之后选择MDF数据库文件,并点击确定按钮。
5、窗口自动关闭后你就会发现,数据库已经附加上了。
6、如果想把这个数据库去掉的话,那就右键该数据库(比如刚刚附加的数据库)选择所有任务—分离数据库—确定。
参考技术A1、测试使用SQL Servre 2012 R2,创建如下的数据表:
--创建测试用的用户表
CREATE TABLE TBLUser
(
Name nvarchar(30),
Password varbinary(1000),
)
GO
2、创建数据库主密钥
数据库主密钥(Database Master Key)在服务主密钥之下,由服务主密钥进行加密。这是一个数据库级别的密钥,可以用于为创建数据库级别的证书或非对称密钥提供加密。每一个数据库只能有一个数据库主密钥,通过T-SQL语句创建。具体代码如下:
--创建数据库主密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='passW@ord'
GO
3、创建证书
创建一个用来加密对称秘钥证书,具体代码如下:
--创建证书
CREATE CERTIFICATE TestCert with SUBJECT = 'Test Certificate'
GO
4、创建一个对称秘钥
由SQL Server加密层次结构可以看出,对称密钥可以通过密码创建,也可以通过其它对称密钥、非对称密钥和证书创建。本文以证书创建一个测试用的对称秘钥,具体代码如下:
--创建对称密钥
CREATE SYMMETRIC KEY TestSymmetric WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE TestCert
GO
5、加密数据
先打开证对称秘钥,再使用ENCRYPTBYKEY函数加密数据,完成后关闭对称秘钥。具体代码如下:
--使用对称秘钥加密数据
OPEN SYMMETRIC KEY TestSymmetric DECRYPTION BY CERTIFICATE TestCert;
INSERT INTO TBLUser values('张三', ENCRYPTBYKEY(Key_Guid(N'TestSymmetric'), '123456'));
CLOSE SYMMETRIC KEY TestSymmetric;
GO
6、查看加密后的数据
直接下SQL查询加密后的数据,可以看到password的内容是一串不可以阅读的16进制的字符。
--查看加密后的数据
SELECT * FROM TBLUser
GO
7、解密数据
先打开证对称秘钥,再使用DecryptByKey函数解密数据,完成后关闭对称秘钥。具体代码如下:
--解密数据
OPEN SYMMETRIC KEY TestSymmetric DECRYPTION BY CERTIFICATE TestCert;
SELECT Name, CAST(DecryptByKey(password) as varchar(100)) Password FROM TBLUser;
CLOSE SYMMETRIC KEY TestSymmetric;
GO
参考技术B 在SQl2005下自带的函数hashbytes() ,此函数是微软在SQL SERVER 2005中提供的,可以用来计算一个字符串的 MD5 和 SHA1 值,使用方法如下:--获取123456的MD5加密串
select hashbytes('MD5', '123456') ;
--获取123456的SHA1加密串
select hashbytes('SHA1', '123456') ;有了这个函数可以在sqlserver中为字符串进行加密,但是hashbytes() 函数的返回结果是 varbinary类型,(以 0x 开头 16 进制形式的二进制数据)通常情况下,我们需要的都是字符串型的数据,很多人首先想到的可能就是用 CAST 或 Convert 函数将varbinary 转换为 varchar,但这样转换后的结果会是乱码,正确转换 varbinary 可变长度二进制型数据到 16 进制字符串应该使用系统内置函数 sys.fn_varbintohexstr()(只在sqlserver2005下有),如下所示:select sys.fn_varbintohexstr(hashbytes('MD5', '123456'))
然后就可以截取需要的部分select lower(right(sys.fn_varbintohexstr(hashbytes('MD5','123456')),32))为md5加密串。
sql server2008怎么给一张表加一个用户
有时候我们要对数据库进行权限管理,防止有人误操作或者窃取数据,那么小编这篇文章就是实现这个的操作过程。
百度经验:jingyan.baidu.com
百度经验:jingyan.baidu.com
以上是关于sql server中怎么给数据库表中的用户密码加密的主要内容,如果未能解决你的问题,请参考以下文章
在Action中查询出SQL SERVER表的数据,返回一个list。怎么在JSP页面中使用Struts标签,显示出表中的内容?