目录
权限列表
查看权限:
mysql> show privileges;
效果大致如下(这里查看的我自己新建用户的权限,并不是root用户):
mysql> show privileges;
+-------------------------+---------------------------------------+-------------------------------------------------------+
| Privilege | Context | Comment |
+-------------------------+---------------------------------------+-------------------------------------------------------+
| Alter | Tables | To alter the table |
| Alter routine | Functions,Procedures | To alter or drop stored functions/procedures |
| Create | Databases,Tables,Indexes | To create new databases and tables |
| Create routine | Databases | To use CREATE FUNCTION/PROCEDURE |
| Create temporary tables | Databases | To use CREATE TEMPORARY TABLE |
| Create view | Tables | To create new views |
| Create user | Server Admin | To create new users |
| Delete | Tables | To delete existing rows |
| Drop | Databases,Tables | To drop databases, tables, and views |
| Event | Server Admin | To create, alter, drop and execute events |
| Execute | Functions,Procedures | To execute stored routines |
| File | File access on server | To read and write files on the server |
| Grant option | Databases,Tables,Functions,Procedures | To give to other users those privileges you possess |
| Index | Tables | To create or drop indexes |
| Insert | Tables | To insert data into tables |
| Lock tables | Databases | To use LOCK TABLES (together with SELECT privilege) |
| Process | Server Admin | To view the plain text of currently executing queries |
| Proxy | Server Admin | To make proxy user possible |
| References | Databases,Tables | To have references on tables |
| Reload | Server Admin | To reload or refresh tables, logs and privileges |
| Replication client | Server Admin | To ask where the slave or master servers are |
| Replication slave | Server Admin | To read binary log events from the master |
| Select | Tables | To retrieve rows from table |
| Show databases | Server Admin | To see all databases with SHOW DATABASES |
| Show view | Tables | To see views with SHOW CREATE VIEW |
| Shutdown | Server Admin | To shut down the server |
| Super | Server Admin | To use KILL thread, SET GLOBAL, CHANGE MASTER, etc. |
| Trigger | Tables | To use triggers |
| Create tablespace | Server Admin | To create/alter/drop tablespaces |
| Update | Tables | To update existing rows |
| Usage | Server Admin | No privileges - allow connect only |
+-------------------------+---------------------------------------+-------------------------------------------------------+
31 rows in set (0.00 sec)
MySQL所有权限:
(1) CREATE和DROP权限 ,可以创建新的数据库和表,或删除(移掉)已有的数据库和表。如果将 MySQL数据库中的DROP权限授予某用户,用户就可以删除MySQL访问权限保存的数据库。
(2) SELECT、INSERT、UPDATE和DELETE权限 允许在一个数据库现有的表上实施操作。
(3) SELECT权限只有在它们真正从一个表中检索行时才被用到。
(4) INDEX权限 允许创建或删除索引,INDEX适用于已 有的表。如果具有某个表的CREATE权限,就可以在CREATE TABLE语句中包括索引定义。
(5) ALTER权限 可以使用ALTER TABLE来更改表的结构和重新命名表。
(6) CREATE ROUTINE权限用来创建保存的 程序(函数和程序),ALTER ROUTINE权限用来更改和删除保存的程序, EXECUTE权限用来执行保存的 程序。
(7) GRANT权限允许授权给其他用户,可用于数据库、表和保存的程序。
(8) FILE权限使用户可以使用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句读或写服务器上的文件,任何被授予FILE权限的用户都能读或写MySQL服务器上的任何文件(说明用户可以读任何数据库目录下的文件,因为服务器可以访问这些文件)。
MySQL权限的分布:
权限分布 | 可能设置的权限 |
表权限 | Select,Insert,Update,Delete,Create,Drop,Grant,References,Index,Alter |
列权限 | Select,Insert,Update,References |
过程权限 | Execute,Alter,Routine,Grant |
授予权限的规则
(这部分随便看下就好)
1、只授予能满足需要的最小权限 ,防止用户误操作(干坏事)。比如用户只是需要查询,那就只给select权限就可 以了,不要给用户赋予update、insert或者delete权限。
2、创建用户的时候限制用户的登录主机 ,一般是限制成指定IP或者内网IP段。
3、为每个用户设置满足密码复杂度的密码 。
4、定期清理不需要的用户 ,回收权限或者删除用户。
授予权限
给用户授权的方式有2种(MySQL8.0),分别是通过把角色赋予用户给用户授权和直接给用户授权 。用户是数据库的使用者,我们可以通过给用户授予访问数据库中资源的权限,来控制使用者对数据库的访问,消除安全隐患。
授权命令:
GRANT 权限1,权限2,…权限n ON 数据库名称.表名称 TO 用户名@用户地址 [IDENTIFIED BY ‘密码口令’];
举个栗子:
这里是使用root用户,对van授予权限,使其可以访问dbtest1数据库。此时我们再回到van的账户进行查看:
mysql> show grants;
此处可以看到,van用户具有了查询和修改dbtest1的权限。
授权给空对象:
在进行授权时,若没有发现没有该用户,则会直接创建一个新用户。
例如:
用root用户,授予dbtest1这个库下的所有表的插删改查的权限:
GRANT SELECT,INSERT,DELETE,UPDATE ON dbtest1.* TO 'root'@'%';
授予通过网络方式登录的billy用户,对所有库所有表的全部权限,密码设为123。注意这里唯独不包括grant的权限
GRANT ALL PRIVILEGES ON *.* TO billy@'%' IDENTIFIED BY '123';
查看权限
查看当前用户权限:
SHOW GRANTS;
# 或
SHOW GRANTS FOR CURRENT_USER;
# 或
SHOW GRANTS FOR CURRENT_USER();
查看某用户的全局权限:
SHOW GRANTS FOR 'user'@'主机地址' ;
这里是使用root用户查看van的权限
回收权限
收回权限就是取消已经赋予用户的某些权限。收回用户不必要的权限可以在一定程度上保证系统的安全性。MySQL中使用REVOKE语句取消用户的某些权限。使用REVOKE收回权限之后,用户账户的记录将从 db、host、tables_priv和columns_priv表中删除,但是用户账户记录仍然在user表中保存(删除user表中 的账户记录使用DROP USER语句)。注意:在将用户账户从user表删除之前,应该收回相应用户的所有权限。
注意:在将用户账户从user表删除之前,应该收回相应用户的所有权限。
收回权限命令:
REVOKE 权限1,权限2,…权限n ON 数据库名称.表名称 FROM 用户名@用户地址;
举例:
#收回全库全表的所有权限
REVOKE ALL PRIVILEGES ON *.* FROM joe@'%';
#收回mysql库下的所有表的增删改查权限
REVOKE SELECT,INSERT,UPDATE,DELETE ON mysql.* FROM joe@localhost;
这里回收了van对于dbtest 1的增删改查权限。 效果如下:
此时的van账户已经失去了对dbtest1的操作权限。
注意: 须用户重新登录后才能生效