美文网首页
MySQL用户权限管理

MySQL用户权限管理

作者: misaka去年夏天 | 来源:发表于2017-06-02 17:24 被阅读0次

对mysql的权限的控制可以大致分为三个层面:

  • 连接上允不允许(是否能登录到mysql服务器)
  • 数据库层面上:允许用户操作哪些数据库
  • 数据标层面上:允许用户操作哪些表,并可以定义对表的操作权限:比如insert,create,update等。如果还觉得不够精细,MySQL还可以精确到对某表某列控制操作权限。
  1. 连接到数据库的权限。
    我们在安装MySQL的过程中,会有一个会话定义你的用户名和密码,这里我用的是root和123456,这个用户名,是最开始连接到MySQL的用户,那么该怎么查看MySQL的用户信息呢?我们用root和123456连接到MySQL之后,show databases;可以看到有很多数据库

    use mysql; 然后show tables;
    可以看到两个表:user表,db表和table_priv。

    用select *from db\G 可以从db表中看到哪些用户拥有对哪些数据库的权限。查看tables_priv可以查看用户拥有哪些表的操作权限。
    查看user表则可以看到能登录到MySQL的用户信息:(以下的user表均指的是mysql库下的user表)
select host,user,password from user;  
我们可以定义一个用户并让他拥有所有库,所有表的所有增删改查等操作权限,语句如下:
grant all on *.* to hehe@'localhost' identified by '123456';
如果要删除这个用户,用delete语句就可以了。
  1. 库权限的控制
    我们可以定义用户可以操作的库,只需要在上面的语句中,改各参数即可,你可能已经猜到了:上面语句中的"某库"修改成对应的库名即可。例如,给hehe用户赋予操作test库的所有权限:
grant all on test.* to hehe@'localhost' identified by '123456';  
  1. 精细到对表的权限的控制
    改一下"某表"和"权限X"就可以了。例如:定义给用户hehe操作test库的goods表的insert,select,update的权限,代码如下:
grant insert,select,update on test.goods to hehe@'localhost' identified by '123456';  
最后,怎样回收用户的库级和表级权限呢?语法如下:
revoke [权限1,权限2...] on 某库.某表 from 用户名@'主机名/IP';  
可不可以回收用户对具体哪一张表的权限呢?我试了一下,貌似是不行的,报错信息如下:

最后提一下:如果要让某子网下的用户(或者某个IP地址)都可以访问数据库服务器时,可以这样定义用户:

update user set host='192.168.1.%' where user='hehe';/*<span style="white-space:pre"> </span>%表示匹配IP地址192.168.1.1至192.168.1.254*/  
flush privileges;/*刷新权限以生效*/  

具体到某个IP地址时把%改成具体的地址即可。有了可以用IP限制登陆的主机,外网的用户就不能登录到内网的MySQL服务器了。

相关文章

网友评论

      本文标题:MySQL用户权限管理

      本文链接:https://www.haomeiwen.com/subject/fbdufxtx.html