专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 MySQL权限管理

MySQL权限管理

更新时间:2021-01-15 17:29:16 来源:动力节点 浏览1011次

说到MySQL权限管理,我们先要明确权限管理的概念:权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。权限管理几乎出现在任何系统里面,只要有用户和密码的系统。

 

账户权限信息被存储在MySQL数据库的几张权限表中,在MySQL启动时,服务器将这些数据库表中权限信息的内容读入内存。其中GRANT和REVOKE语句所涉及的常用权限大致如下这些:CREATE、DROP、SELECT、INSERT、UPDATE、DELETE、INDEX、ALTER、CREATE、ROUTINE、FILE等,还有一个特殊的proxy权限,是用来赋予某个用户具有给他人赋予权限的权限。下面我们来看看这些MySQL权限:

 

1. grant 所有权限

mysql> grant all privileges on *.* to 'USERNAME'@'HOST';

mysql>  flush privileges;

 

2. grant super权限在*.*上(super权限可以对全局变量更改);

mysql> grant super on *.* to 'USERNAME'@'HOST';

mysql>  flush privileges;

 

3. grant某个库下所有表的所有权限

mysql> grant all privileges on DB_NAME.* to 'USERNAME'@'HOST';

mysql>  flush privileges;

 

4. grant某个库下所有表的select权限

mysql>grant select on DB_NAME.* to 'USERNAME'@'HOST';

mysql>  flush privileges;

 

5. grant某个库下某个表的insert权限

mysql> grant insert on  DB_NAME.TABLE_NAME to 'USERNAME'@'HOST';

mysql>  flush privileges;

 

6. grant某个库下某个表的update权限

mysql>grant update on DB_NAME.TABLE_NAME to 'USERNAME'@'HOST';

mysql>  flush privileges;

 

7. grant某个库下某个表的某个字段update权限

mysql> grant update(COLUMN_NAME)  on DB_NAME.TABLE_NAME to 'USERNAME'@'HOST';

mysql>  flush privileges;

 

8.通过GRANT语句中的USAGE权限,可以创建账户而不授予任何权限

mysql> grant usage on *.* to 'USERNAME'@'HOST';

mysql>  flush privileges;

 

9. grant创建、修改、删除MySQL数据表结构权限

mysql> grant create on testdb.* to developer@'192.168.0.%';

mysql> grant alter on testdb.* to developer@'192.168.0.%';

mysql> grant drop on testdb.* to developer@'192.168.0.%';

mysql>  flush privileges;

 

10. grant操作MySQL外键权限

mysql> grant references on testdb.* to developer@'192.168.0.%';

mysql>  flush privileges;

 

11. grant操作MySQL临时表权限

mysql> grant create temporary tables on testdb.* to developer@'192.168.0.%';

mysql>  flush privileges;

 

12. grant操作MySQL索引权限

mysql> grant index on testdb.* to developer@'192.168.0.%';

mysql>  flush privileges;

 

13.grant操作MySQL视图、查看视图源代码权限

mysql> grant create view on testdb.* to developer@'192.168.0.%';

mysql> grant show view on testdb.* to developer@'192.168.0.%';

mysql> flush privileges;

 

14. grant操作MySQL存储过程、存储函数权限

mysql> grant create routine on testdb.* to developer@'192.168.0.%';

mysql> grant alter routine on testdb.* to developer@'192.168.0.%';

mysql> grant execute on testdb.* to developer@'192.168.0.%';

mysql> flush privileges;

 

15.PROXY特殊权限如果想让某个用户具有给他人赋予权限的能力,那么就需要proxy权限了。当你给一个用户赋予all权限之后,你查看mysql.user表会发现Grant_priv字段还是为N,表示其没有给他人赋予权限的权限。

我们可以查看一下系统默认的超级管理员权限:

mysql> show grants for 'root'@'localhost';

+---------------------------------------------------------------------+

| Grants for root@localhost                                           |

+---------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |

| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |

+---------------------------------------------------------------------+

2 rows in set (0.00 sec)

可以看到其本身有PROXY权限,并且这个语句跟一般授权语句还不太一样。所以如果想让一个远程用户有给他人赋予权限的能力,就需要给此用户PROXY权限,如下:

mysql> grant all on *.* to 'test'@'%' identified by 'helloWORD';

mysql> GRANT PROXY ON ''@'' TO 'test'@'%' WITH GRANT OPTION;

mysql> flush privileges;

 

16. 查看用户的权限

Mysql> show grants for 'USERNAME'@'HOST';

 

17. 移除用户权限

# 移除tom用户对于db.xsb的权限;

Mysql> revoke all on db.xsb from 'tom'@'localhost';

# 刷新授权表;

Mysql> flush privileges;

使用REVOKE收回权限之后,用户帐户的记录将从db、host、tables_priv、columns_priv表中删除,但是用户帐号依然在user表中保存。

 

以上就是MySQL数据库中的MySQL权限管理,实际上就是通过MySQL语句来实现的。合理使用MySQL权限管理对于MySQL数据库的使用是至关重要的,也能够加速我们对MySQL数据库的熟练掌握,在本站的MySQL教程中,还有更多的详细的解析,能够帮助我们查漏补缺。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>