MySQL 系列教程之(十三)MySQL 安全管理丨【绽放吧!数据库】

举报
ruochen 发表于 2021/08/08 12:50:42 2021/08/08
【摘要】 MySQL 系列教程之(十三)MySQL 安全管理

访问控制

MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。
换句话说,用户不能对过多的数据具有过多的访问权。

考虑以下内容:

  • 多数用户只需要对表进行读和写,但少数用户甚至需要能创建和删除表;
  • 某些用户需要读表,但可能不需要更新表;
  • 你可能想允许用户添加数据,但不允许他们删除数据;
  • 某些用户(管理员)可能需要处理用户账号的权限,但多数用户不需要;
  • 你可能想让用户通过存储过程访问数据,但不允许他们直接访问数据;
  • 你可能想根据用户登录的地点限制对某些功能的访问。

这些都只是例子,但有助于说明一个重要的事实, 即你需要给用户
提供他们所需的访问权,且仅提供他们所需的访问权。 这就是所谓的访
问控制,管理访问控制需要创建和管理用户账号。

MySQL-管理用户

为了执行数据库操作,需要登录 MySQL。MySQL创建一个名为root的用户账号,它对整个MySQL服务器具有完全的控制。你可能已经在学习中使用root进行过登录,在对非现实的数据库试验MySQL时,这样做很好。不过在现实世界 的日常工作中,决不能使用root。应该创建一系列的账号,有的用于管 理,有的供用户使用,有的供开发人员使用,等等。

-- root用户是mysql超级管理用户,拥有的权限是最高的
-- 创建用户,分配权限
-- 创建 zhangsan 用户使用 234567 登陆mysql
create user zhangsan identified by '234567';

-- 给 zhangsan 用户分配一个 itxdl库中所有表的 select权限
grant select on itxdl.* to zhangsan;

-- 查看用户的权限
show grants for zhangsan;

-- 删除用户的指定权限
revoke delete on itxdl.stu from zhangsan;

-- 简写方式
grant select on itxdl.* to lisi@'%' identified by '111';

SQL注入

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

防护

归纳一下,主要有以下几点:

1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;

2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

6.最好的方案进行SQL预处理:把sql和数据参数进行分离

具体操作
1,准备的sql语句中 使用 %s 或者 %(key)s 占位
2,在执行sql语句时,通过execute方法分别传递sql和参数(列表,元组,字典)

【绽放吧!数据库】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/285617

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。