更新时间:2021-01-15 17:29:16 来源:极悦 浏览1128次
说到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教程中,还有更多的详细的解析,能够帮助我们查漏补缺。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习