一、权限表
- user表
在mysql中,mysql库里的user表记录了允许连接到服务器的账号信息,里面的权限是全局权限。
2.db表和host表
db表和host表是MySQL数据中非常重要的权限表。db表中存储了用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库。host表中存储了某个主机对数据库的操作权限,配合db权限表对给定主机上数据库级操作权限做更细致地控制。
- tables_priv表和columns_priv表
tables_priv表用来对表设置操作权限。而columns_priv表用来对表的某一列设置权限。
- procs_priv表
tables_priv表用来对表设置操作权限。columns_priv表用来对表的某一列设置权限。
二、账户管理
2.1 新建用户和删除用户
一般创建用户的语句为:
mysql>create user '用户名'@'位置信息' identified by '密码';
因为mysql用户的信息都存放在mysql库的user表中,也可以通过向user表中直接插入用户数据来创建用户:
mysql>insert into user(Host,User,authentication_string) values('位置信息','用户名','密码');
授权语句会在授权不存在的 用户时自动创建该用户,所以也可以用此方法创建新用户。
一般删除用户的语句为:
msyql>drop user '用户名'@'位置信息'
同样因为用户的信息也存放在user表中,可以使用delete删除:
delete from user where Host='位置信息' and User='用户名';
#因为一个mysql中允许存在同名用户,所以要额外指定条件host,避免删除错误。
2.2 修改密码
可以在linux的命令行中修改密码,但要确保有使用mysqladmin命令的权限:
mysqladmin -u用户名 -p password=password('密码')
也可以直接修改user表中的数据,使用update,前提是有使用此语句的权限:
mysql>update user set authentication_string=password('密码') where User='用户名' Host='位置信息'
还有第三种方法,使用set进行设置:
msyql>set password=password('密码'); #修改自己的密码
msyql>set password for '用户名'@'位置信息'=password("密码"); #修改其他用户的密码
使用grant也可以用于修改密码:
msyql>grant 权限列表 on *.* to '用户名'@'位置信息' identified by '密码';
msyql>flush privileges;
三、权限管理
在前面多次用到了grant授权语句,其主要功能就是授予其他用户对于目标数据库或数据表能够执行什么操作的权限。可以授予的权限的列表如下:
|----------------------------|------------------------------------|
| Select_priv | 允许用户查询数据。 |
| Insert_priv: | 允许用户插入新数据 |
| Update_priv | 允许用户更新现有数据 |
| Delete_priv | 允许用户删除数据。 |
| Create_priv | 允许用户创建新的数据库和表。 |
| Drop_priv | 允许用户删除数据库和表。 |
| Reload_priv | 允许用户重新加载授权表或刷新日志、主机缓存等。 |
| Shutdown_priv | 允许用户关闭MySQL服务器。 |
| Process_priv | 允许用户查看服务器上的进程信息。 |
| File_priv | 允许用户在MySQL服务器上读取和写入文件 |
| Grant_priv | 允许用户给其他用户授权(如果不拥有此权限,用户只能修改自己的权限)。 |
| References_priv | 与外键约束相关. |
| Index_priv | 允许用户创建或删除索引。 |
| Alter_priv | 允许用户修改表结构。 |
| Show_db_priv | 允许用户查看服务器上所有数据库的名称。 |
| Super_priv | 允许用户执行许多高级管理操作,如设置全局变量或终止其他用户的进程。 |
| Create_tmp_table_priv | 允许用户创建临时表。 |
| Lock_tables_priv | 允许用户锁定表,以防止其他用户并发访问。 |
| Execute_priv | 允许用户执行存储过程和函数。 |
| Repl_slave_priv: | 允许用户作为复制从服务器操作(用于读取主服务器的二进制日志)。 |
| Repl_client_priv | 允许用户访问复制相关的系统表。 |
| Create_view_priv | 允许用户创建视图。 |
| Show_view_priv | 允许用户查看视图定义。 |
| Create_routine_priv | 允许用户创建存储过程和函数。 |
| Alter_routine_priv | 允许用户修改存储过程和函数。 |
| Create_user_priv | 允许用户创建新用户。 |
| Event_priv | 允许用户创建、修改和删除事件调度器的事件。 |
| Trigger_priv | 允许用户在表上创建触发器。 |
| Create_tablespace_priv | 允许用户创建表空间(与MySQL的NDB存储引擎相关)。 |
例如授权一个用户A在自己的主机上能够创建库和表、删除库和表、查询数据、删除数据、插入数据、更改数据的权限,且这个权限只对mysql中的user表生效:
mysql>grant create,drop,select,delete,insert,update on mysql.user to 'A'@'localhost';
mysql>flush privileges;
既然有授予就有收回,通过revoke语句可以收回授予用户的权限。例如收回刚才授予给A的权限:
mysql>revoke create,drop,select,delete,insert,update on mysql.user to 'A'@'localhost';
mysql>flush privileges;
在授予或收回权限时,都可以使用"*"来代表所有的数据库或数据表,将上面的mysql和user换为"*"就是A对所有的数据库中的所有表都有创建库和表、删除库和表、查询数据、删除数据、插入数据、更改数据的权限。
若想要查看某个用户拥有的权限,可以使用show来查看,例如查看A的权限:
mysql>show grants for '用户名'@'位置信息';