当前位置:C++技术网 > 资讯 > MySQL权限管理相关的知识全面总结

MySQL权限管理相关的知识全面总结

更新时间:2017-01-21 09:25:51浏览次数:1+次

    在做MySQL数据库管理的时候,权限管理是必须非常了解的。因为这个了解不多,所以之前实实在在的让服务器被黑了一次。幸好是临时的测试服务器,如果是正式运行的服务器,那就损失惨重了。如果你想感受下被黑的滋味,你看看这篇文章《第一次遇见服务器被黑客攻击,心情是复杂的》。
    所以,下定决心要全面学习一下mysql权限管理的知识。鉴于网上很多文章讲的零散,我就按照我的学习方式总结一遍,形成一个完整的知识分享文章。你看完这篇文章,你对mysql数据库权限管理部分的知识也就入门了。
    
单引号使用说明:密码必须有单引号。用户名和主机名如果写完整的,可以不要单引号,如果含有%和*,就必须要单引号。

MySQL关键词大小写不敏感,可以大写,也可以小写。

*:表示所有存在的字段、表名、数据库名等
%:表示匹配任意长度的字符串
比如:select * from tb where id like 'a_%_b'

在执行权限管理的时候,当前登录的用户本身就需要具备操作权限的权限哦。

1.查看指定用户权限

mysql> show grants for 用户名 (用户名写单引号不是必须的)


2.设置/修改用户权限
mysql> grant 权限 on 数据库名.表名 to 用户名@主机名 identified by '密码'
说明:主机名和密码部分是可选的,在设置权限的时候可以不指定,也就不限定。所以你可以这样:

mysql> grant 权限 on 数据库名.表名 to 用户名


3.撤销用户权限
mysql>revoke 权限 on 数据库名.表名 from 用户名@主机名 identified by '密码'
说明:撤销权限或者叫做回收权限,和设置权限是逆向过程,所以格式基本一样就是一个是grant...to,一个是revoke...from。

4.全部权限和位置说明
-- 所有的权限,用 all,如:
mysql> grant all on *.* to root;
-- 所有数据库的权限,用 *.*,如:
mysql> grant all on *.* to root;
-- 指定数据库的所有表权限,用 数据库名.*,如:
mysql> grant all on 数据库名.* to root;
-- 指定数据库指定表的权限,用 数据库名.表名,如:
mysql> grant all on 数据库名.表名 to root;

5.主机名说明
%:匹配所有的主机,因为主机名作为一个字符串,所以用%,而不是*
localhost:本地本机访问,localhost不会被解析成IP地址,直接通过UNIX socket连接
127.0.0.1 :会通过TCP/IP协议连接,并且只能在本机访问。
::1 :::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1。

6.所有的权限说明(一共30个)
    为了服务器的安全起见,我们不要给一般用户指定全部权限,而应该根据用户的实际需要分配合适的权限。权限过高,一方面可能由于操作不慎引起问题,另一方面可能会被黑客攻击利用。
    所有权限的分类说明,请阅读《mysql数据库30个权限的分类说明》。