数据库中的密码存储方法与安全性 (密码存数据库中)

随着互联网的普及和发展,人们对数据安全的需求也日趋迫切。而密码是用户个人信息中最重要的一部分,也是最容易被攻击和泄露的部分。数据库中的密码存储方法和安全性,直接关系到用户账户的安全,也是企业安全风险管理中的重要一环。

目前常见的密码存储方法

常见的密码存储方法包括明文存储、单向加密、双向加密等几种。

1.明文存储:指将用户密码以明文方式保存在数据库中,这种方法非常简单,但也非常不安全。由于密码文本可以被任何人读取,一旦数据库被攻击或泄露,用户密码也将随之泄露。

2.单向加密:通过一种散列算法对用户密码进行加密,生成一段唯一的密文。这种方法只在用户注册制定密码时使用,而在用户登录时,输入的密码会再次被单向加密,与原先数据库中存储的密文进行比对,从而验证密码是否正确。单向加密比明文存储更安全,但它也有被破解的风险,一些弱密码可以被破解。

3.双向加密:也称为对称加密,是一种较为高级的密码存储方式。它不仅通过一种密钥对密码进行加密,还可逆推出初次明文。这种加密方法在数据传输时非常常见,但在数据库中存储时风险较大,因为如果加密密钥被攻击者获取,密码将彻底暴露。

安全性高的密码存储方法

单向哈希加密是目前最安全的密码存储方法之一。哈希是单向函数,通过它实现单向哈希加密的过程是将用户密码反复进行哈希,直至得到一个固定长度的密文。这样得到的密文长短保持一致,且无法还原出原明文。当用户输入密码时,系统会同样使用单向哈希算法将用户输入的密码哈希,再与数据库中存储的哈希值进行比较来验证密码是否正确。

在单向哈希加密的基础上,还可以加入“盐值”的概念,增加密码的安全性。添加盐值的目的是在哈希加密时对密码进行防范,即对用户密码进行填充,使得每个密码都不同,增加破解的难度。因为破解单向哈希加密的本质是暴力破解,通过强制进行每种可能的密码组合到哈希函数中,并且与已知的哈希值进行比对,从而解密出原来的密码。

MySQL数据库中的密码存储方法

在MySQL数据库中,存储密码的字段为“authentication_string”。在5.7版本之前,MySQL数据库中的用户密码默认使用单向加密存储,可以通过修改该字段的值来更改用户密码。然而,这种方式在安全性上还存在一定的风险,因为单向加密易被暴力破解。

从5.7版本开始,MySQL将默认采用SHA-256算法进行密码加密。SHA-256是一种高强度的单向哈希加密算法,其安全性更高、破解难度更大。此外,在真正对密码进行加密前,MySQL还会在服务器缓存中生成一个随机的盐值,从而增强密码的安全性。该盐值是基于128个最近使用的密码生成的,通过将盐值和哈希密码存储在authentication_string字段中来保存.

密码存储安全应用实例

在实际系统开发和应用过程中,可以采取很多方法来增强密码的安全性,如:

1.密码强度策略:首先要在系统中制定密码强度策略,并向用户传达密码复杂度的重要性。这可以包括强制要求密码长度、使用大小写字母、数字、特殊字符等。

2.强制修改密码:在用户首次重置密码后,应强制要求用户在接下来的一段时间内更改密码。这样可以确保用户密码处于更佳状态。

3.锁定账户:在用户多次输错密码后,可以对账户进行锁定。这可以避免恶意攻击者尝试大量猜测密码。此外还可以考虑增加对账户的审计追踪机制,保证数据安全。

结语

在互联网时代,数据安全面临的威胁和挑战也变得更多,密码存储方法和安全性成为了一个企业不可或缺的重要环节。采用前沿的密码加密技术和定期维护通过密码政策和审计追踪机制,能够有效保护用户密码的安全,从而降低企业面临的风险。但并不意味着采用了高强度的加密算法,就完全没有可能被攻击者攻击或泄露,所有这些技术都需要技术人员认真学习和应用。

相关问题拓展阅读:

MySql数据库中存放用户密码需要注意什么

密码加密,,,少用password,acount等做表字段~!~

1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就需要使用SSH隧道来加密该连接的通信。

2.用set password语句来修改用户的密码,三个步骤,先“mysql -u root”登陆数据库系统,然后“mysql> update mysql.user set password=password(‘newpwd’)”,最后执行“flush privileges”就可以了。

3.需要提防的攻击有,防偷听、篡改、回放、拒绝服务等,不涉及可用性和容错方面。对所有的连接、查询、其他操作使用基于ACL即访问控制列表的安全措施来完成。也有一些对SSL连接的支持。

4.除了root用户外的其他任何用户不允许访问MySQL主数据库中的user表;

加密后存放在user表中的加密后的用户密码一旦泄露,其他人可以随意用该用户名/密码相应的数据库;

5.用grant和revoke语句来进行用户访问控制的工作;

6.不使用明文密码,而是使用md5()和sha1()等单向的哈系函数来设置密码;

7.不选用字典中的字来做密码;

8.采用防火墙来去掉50%的外部危险,让数据库系统躲在防火墙后面工作,或放置在DMZ区域中;

9.从因特网上用nmap来扫描3306端口,也可用telnet server_host 3306的方法测试,不能允许从非信任网络中访问数据库服务器的3306号TCP端口,因此需要在防火墙或路由器上做设定;

10.为了防止被恶意传入非法参数,例如where ID=234,别人却输入where ID=234 OR 1=1导致全部显示,所以在web的表单中使用”或岩敏””来用字符串,在动态URL中加入%22代表双引号、%23代表井号、%27代表单引号;传递未检 查过的值给mysql数据库是非常危险的;

11.在传递数据给MySQL时检查一下大小;

12.应用程序需要连接到数据库应该使用一般的用户帐号,只开放少数必要的权限给该用户;

13.在各编程接口(C C++ PHP Perl Java JDBC等)中使用特定‘逃脱字符’函数;

在因特网上使用mysql数据库时一定少用传输明文的数据,而用SSL和SSH的加密方式数据来传输;

14.学会使用tcpdump和strings工具来查看传输数据的安全性,和棚例如tcpdump -l -i eth0 -w -src or dst port 3306 | strings。以普通用户粗棚枝来启动mysql数据库服务;

15.不使用到表的联结符号,选用的参数 –skip-symbolic-links;

16.确信在mysql目录中只有启动数据库服务的用户才可以对文件有读和写的权限;

17.不许将process或super权限付给非管理用户,该mysqladmin processlist可以列举出当前执行的查询文本;super权限可用于切断客户端连接、改变服务器运行参数状态、控制拷贝复制数据库的服务器;

18.file权限不付给管理员以外的用户,防止出现load data ‘/etc/passwd’到表中再用select 显示出来的问题;

19.如果不相信DNS服务公司的服务,可以在主机名称允许表中只设置IP数字地址;

20.使用max_user_connections变量来使mysqld服务进程,对一个指定帐户限定连接数;

21.grant语句也支持资源控制选项;

22.启动mysqld服务进程的安全选项开关,–local-infile=0 或1 若是0则客户端程序就无法使用local load data了,赋权的一个例子grant insert(user) on mysql.user to ‘user_name’@’host_name’;若使用–skip-grant-tables系统将对任何用户的访问不做任何访问控制,但可以用 mysqladmin flush-privileges或mysqladmin reload来开启访问控制;默认情况是show databases语句对所有用户开放,可以用–skip-show-databases来关闭掉。

23.碰到Error 1045(28000) Access Denied for user ‘root’@’localhost’ (Using password:NO)错误时,你需要重新设置密码,具体方法是:先用–skip-grant-tables参数启动mysqld,然后执行 mysql -u root mysql,mysql>update user set password=password(‘newpassword’) where user=’root’;mysql>Flush privileges;,最后重新启动mysql就可以了。

怎么将注册信息(账户,密码等等)存到数据库?C# 求助~

SqlConnection con =new SqlConnection(“数据库地址”);//数据库连接

con.Open();

SqlCommand cmd = new SqlCommand(“sql语句”, con);

cmd.ExecuteNonQuery();//更新,漏坦御插入(注册就是像sql插入一条记录)

SqlDataAdapter sda=new SqlDataAdapter(“sql语句”, con);

DataSet ds=new DataSet();

sda.Fill(ds);//查找(把查出的数据集存入DataSet 中,用来绑定什么的)

登录的话可以直接判断if(ds.Tables.Rows.count>返岩0){//执行相关操作};登录无非是检查数据库是否有这条记录,写好sql语句就好了,如:select Uaccount from 表名 where Uaccount=?? and Ucipher =?? 就可以了。其中’??’就是信源文本框赋值了。。

if (textBox1.Text == “”),textbox1.text==null || textbox1.equals(“”)

if(!textBox2.Text .equals( textBox3.Text))

=====

登录时,提取数察指姿据库保存的对应用户逗漏名密码,跟输败绝入的对比,正确登录成功,跳转链接,错了,提示信息。继续登录,,

sql:”insert into 表名 (Uaccount,Ucipher) values(@account,备仿@cipher) “饥腔;

关于密码存数据库中的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

来源地址:数据库中的密码存储方法与安全性 (密码存数据库中)

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:www.88531.cn资享网,谢谢!^^

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享