MySQL 数据库用户权限管理简介

学习笔记 马富天 2019-03-13 16:50:13 12 1

【摘要】数据库安全是网络安全中重要部分,对于用户权限应当要有非常严格的管理。因为在实际的测试过程中很多时候都需要给不同用户创建该用户的数据库,本文介绍一下 MySQL 用户权限管理方面需要注意的几点。

创建用户需要使用 root 账号,只有 root 账户有权限对用户进行管理。以下从一个示例进行讲解:

  1. # 创建一个数据库 mafutian_db
  2. create database mafutian_db default charset utf8;

'%' - 所有主机都能访问

'localhost' 或者 127.0.0.1 - 本机访问

'11.22.33.44' - 指定 ip 访问

  1. # 打开 mysql 数据库
  2. use mysql;
  3. # 创建一个用户 mafutian , 密码 123456 , 本地访问 localhost
  4. # 创建之后该用户可以在本地服务器访问数据库,登录后可以看到两个数据库:information_schema 和 test。当然如果将匿名用户删掉之后,就不能够看到 test 数据库了。
  5. create user mafutian@localhost identified by "123456";
  6. # 可以修改用户远程登录权限:可以是 localhost、指定 IP 118.119.120.121、或者通配符 %(任意 IP) 
  7. update user set host='%' where user='mafutian';
  8. # 可以修改密码
  9. update user set password = password("mft123456") where user = "mafutian";
  10. # 刷新 MySQL 系统权限的相关表 
  11. flush privileges;

到此需要讲解一下,首先,information_schema 是 information_scheme 是公共视图,其实是不存在这个数据库的,

它是只读表,不能修改,也不能够给用户授权 select,delete,update 等等权限,默认用户登录后都可以看到,只能看到不能修改。

当然有些童鞋会想不让用户看到这个数据库,想回收它的权限,如下:

  1. # 回收 information_schema 的权限,会报错,因为无法修改的,是 MySQL 默认的,不用担心安全问题,因为新用户只能在 information_schema 中看到与自己有关的信息
  2. REVOKE ALL PRIVILEGES ON  information_schema.* FROM  mafutian;

其次,会看到 test 数据库,而且发现新用户可以对其进行增删改查的操作,然而自己在创建用户的时候并没有赋予其权限,不用担心,这是因为 MySQL 旧的版本是默认有匿名账号的,匿名账号是有 test 数据库的权限的,出于保证数据的安全性,最好是要把匿名用户删掉。

  1. # 删掉匿名账号,删除后新用户将无法操作 test 数据库
  2. use mysql;
  3. delete from user where user = "";
  4. flush privileges;

接下来,我们给新用户授权我们最初创建的数据库相关权限。

  1. # 授权 mafutian_db 的所有权限
  2. # 语句:grant 权限 on 数据库.表 to 用户@主机
  3. # WITH GRANT OPTION 是给新用户有授权给其它用户的权限,一般就不要这个,为了安全起见
  4. # identified by "mft123456",这里的密码一定要跟该用户的访问密码一致,不然后期该用户登录之后,是没有权限访问改数据库的
  5. # 当然 identified by "mft123456" 这语句也是可以不要的,默认就是用户的登录密码
  6. # 这里 ALL PRIVILEGES 可以换成 select,update,delete 等具体的权限
  7. # 授权数据库指定权限
  8. GRANT ALL PRIVILEGES ON mafutian_db.* TO mafutian@'localhost' identified by "mft123456";
  9. # 修改成所有主机可以访问
  10. GRANT ALL PRIVILEGES ON mafutian_db.* TO mafutian@'%';
  11. flush privileges;
  12. # 回收权限
  13. REVOKE ALL PRIVILEGES ON  mafutian_db.* FROM  mafutian@'%';
  14. REVOKE ALL PRIVILEGES ON  mafutian_db.* FROM  mafutian@'localhost';
  15. flush privileges;

这里需要注意一下,回收了数据库之后,该用户还是可以看到 mafutian_db 这个数据库的,但是没有任何权限

  1. # 查看数据库,下面 mafutian_db 中的 test 表是我用 root 账号新建的表。
  2. mysql> show databases;
  3. +--------------------+
  4. | Database           |
  5. +--------------------+
  6. | information_schema |
  7. | mafutian_db        |
  8. +--------------------+
  9. mysql> use mafutian_db;
  10. Database changed
  11. mysql> show tables;
  12. +-----------------------+
  13. | Tables_in_mafutian_db |
  14. +-----------------------+
  15. | test                  |
  16. +-----------------------+
  17. 1 row in set
  18. mysql> select * from test;
  19. 1142 - SELECT command denied to user 'mafutian'@'localhost' for table 'test'

最后就是当我们不需要用到该用户了,就要删除该用户,保证数据库的安全性。

  1. # 删除用户,下面是最全的删除方式。
  2. # 如果仅用  delete from user 来删除,很有可能删除不干净,需要用到 drop 来再次删。
  3. delete from user where user = "maftutian";
  4. drop user 'mafutian'@'%';
  5. drop user 'mafutian'@'localhost';
  6. flush privileges;

这是官网给的信息:

Assume the user is there, so drop the user

After deleting the user, there is need to flush the mysql privileges

Now create the user.

以上就是我对数据库用户权限的一些认识,有什么不对的地方欢迎大家指出~

补充内容:

  1. # 查看用户当前拥有的权限
  2. show grants for mafutian@localhost;
  3. show grants for mafutian@'%';

当看到有 GRANT USAGE ON ··· 这样的字样,则说明是空权限,除了能够连接数据库,只允许登录,其他都不能操作。

一旦对某个用户进行相关权限的授权,则就会自动添加 GRANT USAGE ON ··· ,并且这个是无法回收的,即 revoke 操作无效。

版权归 马富天PHP博客 所有

本文标题:《MySQL 数据库用户权限管理简介》

本文链接地址:http://www.mafutian.net/412.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 快速复制表结构、表数据的简单方式 》 下一篇《 单个页面中 PHP 连接 MySQL 数据的基本操作【 mysqli 面向对象】 》

所有评论

  1. 首页
  2. 上一页
  3. 1
  4. 下一页
  5. 尾页
  6. 第1页
  7. 每页12条
  8. 共1页
  9. 共1条
评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码

TOP10

  • 浏览最多
  • 评论最多