在实际应用中,我们经常会有这样一种需求——某一个项目的开发团队只能对其正在进行项目的数据库及数据表进行增删改查操作,而无权对其他项目的数据库进行上述操作,这就不能单单使用一个 root 用户来搞定,需要我们为 MySQL 添加普通用户并赋予相应权限。

 

1.创建/ 移除一个MySQL 普通用户:

mysql> create user 'newuser'@'%' identified by 'thepassword';

一旦用户被创建,包括加密的密码、权限和资源限制在内的所有账号细节都会被存储在名为 mysql.user 的表中。

查看用户是否创建成功:

mysql> select u.user,u.host,u.password from mysql.user where u.user='newuser';

删除用户对应的命令为drop user :

mysql> drop user 'newuser'@'%';

补充:当然上面列出的是文艺青年的做法,如果你硬要做普通青年,也可以直接操作 mysql 数据库的 user 表来创建 / 移除用户:

mysql> use mysql;

mysql> insert into user values ('%','newuser','*AEA2E7D4D184B6C8F2702761DCC05BCF4421E31A','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',30,0,10,5);

mysql> delete from user where user='newuser' and host='%';

 

2.对用户权限进行操作:

刚创建的 MySQL 用户没有任何访问权限,这种用户当然不能在 MySQL 数据库中进行任何操作,以下是相关权限级别:

all: 所有可用的权限

select: 查看库、表、视图和索引

update: 修改表或列

delete: 删除行

insert: 插入行(注:该权限不能插入列,插入列相当于 alter 操作)

create: 创建库、表和索引(不能创建视图,需要create view权限;同时,也不能创建临时表)

alter: 修改表,包括添加列,修改表的字段属性及长度等

drop: 删除库、表、视图和索引(对于视图来说,没有具体的 drop view 权限,只要用户有 drop 权限就可以通过 drop view 命令删除视图,这一点与 create 权限有别)

references: 操作外键

index: 操作索引

create view: 创建视图

show view: 查看视图(在具体实验中感觉该权限有没有并不影响查看视图,如果视图已经创建,即便没有该权限,可以使用show tables; 命令查看,同时也可以使用 select 查看其详细数据)

create temporary tables: 创建临时表(create 权限不涵盖该权限)

create routine: 创建存储过程、函数

alter routine: 修改存储过程、函数

execute: 执行存储过程、函数

(1)为 newuser 用户授权:

mysql> grant <privileges> on <database>.<table> to 'newuser'@'%';

其中,<privileges>代表要授予的权限,<database>.<table>代表要授予的具体数据库及数据表,可以使用通配符 * ,最后代表要授予的用户及 host 。

注:这里需要特别说明的一点是,如果将 create / drop 权限授予全部数据库及数据表,如下所示:

mysql> grant create on *.* to 'newuser'@'%';

则 newuser 用户可以新建数据库及数据表;反之,如果只将 create / drop 权限授予某个数据库,如下所示:

mysql> grant create on proving.* to 'newuser'@'%';

则 newuser 用户只能在 proving 数据库下创建数据表,而不能创建新的数据库。

(2)查看 newuser 用户所拥有的权限:

mysql> show grants for 'newuser'@'%';

(3)删除 newuser 用户拥有的权限:

mysql> revoke <privileges> on <database>.<table> from 'newuser'@'%';

参数与授权时代表的含义相同,只是授权为 grant … to … ,取消授权为 revoke … from … 。

删除 newuser 用户对 proving 数据库中所有表的数据修改权限:

mysql> revoke update on proving.* from 'newuser'@'%';

 

3.对用户资源进行操作:

除了对用户进行权限操作以外,还能单独设置 MySQL 的资源使用限制,可用的资源限制如下:

MAX_QUERIES_PER_HOUR  每小时允许的最大请求数量

MAX_UPDATES_PER_HOUR  每小时允许的最大更新数量

MAX_CONNECTIONS_PER_HOUR 每小时允许的最大连接数量

MAX_USER_CONNECTIONS  所有用户对服务器的同时连接数量

使用如下命令为newuser 用户增加资源限制:

mysql> grant usage on <database>.<table> to 'newuser'@'%' with<resource-limits>;

在 <resource-limits>中可以指定多个使用空格分隔开的资源资源限制,如:

mysql> grant usage on proving.* to 'newuser'@'%' with max_queries_per_hour 30 max_connections_per_hour 6;

暂时不知道如何取消这些资源限制,这里先做一个大概了解。

 

注:

通过 grant 、 revoke 修改过用户权限后,即便使用

mysql> flush privileges;

命令,该用户也只有在从新连接 MySQL时,新修改的权限才会生效。mysql 库中的授权表共有 5 个,分别是 user、db、host、tables_priv、columns_priv。权限范围越来越小,先做大概了解。


   有关权限推荐一篇写的比较详细的博客,写的很清晰,看完以后感觉收获很大,地址如下:

   


转载于:https://blog.51cto.com/xitongjiagoushi/1629990