MySQL中用户权限、库权限、表权限的控制 

在开发中,除了可以在脚本代码中控制开发者对MySQL数据库数据表的权限,还可以在mysql层面进行控制。

 

对mysql的权限的控制可以大致分为三个层面:①连接上允不允许(是否能登录到mysql服务器)②数据库层面上:允许用户操作哪些数据库③数据标层面上:允许用户操作哪些表,并可以定义对表的操作权限:比如insert,create,update等。如果还觉得不够精细,MySQL还可以精确到对某表某列控制操作权限。

 

①连接到数据库的权限:我们在安装MySQL的过程中,会有一个会话定义你的用户名和密码,这里我用的是root和123456,这个用户名,是最开始连接到MySQL的用户,那么该怎么查看MySQL的用户信息呢?我们用root和123456连接到MySQL之后,show databases;可以看到有很多数据库

 

use mysql;使用mysql那个数据库,在这个数据库里,可以看到两个表:user表,db表和table_priv。

 

 

用select *from db\G 可以从db表中看到哪些用户拥有对哪些数据库的权限。查看tables_priv可以查看用户拥有哪些表的操作权限。

 

查看user表则可以看到能登录到MySQL的用户信息:(以下的user表均指的是mysql库下的user表)

 

select host,user,password from user;

 

那么,该如何新增一个用户,用以连接到MySQL呢?如果你想用

 

insert into user (host,user,password)values('localhost','hehe','123456');

 

来添加用户,那么MySQL会报错:ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value错误

正确的定义方法是

 

grant [权限1,权限2...] on 某库.某表 to 新用户名@'主机名/IP地址' identified by '密码';

 

我们可以定义一个用户并让他拥有所有库,所有表的所有增删改查等操作权限,语句如下:

 

grant all on *.* to hehe@'localhost' identified by '123456';

 

如果要删除这个用户,用delete语句就可以了。

 

②库权限的控制:我们可以定义用户可以操作的库,只需要在上面的语句中,改各参数即可,你可能已经猜到了:上面语句中的"某库"修改成对应的库名即可。例如,给hehe用户赋予操作test库的所有权限:

 

grant all on test.* to hehe@'localhost' identified by '123456';

 

③精细到对表的权限的控制:改一下"某表"和"权限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';

 

例如:回收用户hehe对test库的所有表的update的权限:

revoke update on test.* from hehe@'localhost';

 

可不可以回收用户对具体哪一张表的权限呢?我试了一下,貌似是不行的,报错信息如下:

 

 

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

 

  1. 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*/

  2. flush privileges;/*刷新权限以生效*/

 

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

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!