学习mysql数据库,对于它的权限的管理是关键的一环。所以,下面介绍的是MySQL权限的管理。
MySQL权限表MySQL数据库实际上是通过将用户写入mysql库中对应的权限表来控制访问权限的。
权限表分别为: user,db,table_priv,columns_priv和host。
- user:记录允许连接到服务器的用户的信息,里面的权限是全局级的
- db:记录每个用户对各个数据库级别的操作权限
- table_priv:记录每个用户对数据表级别的操作权限
- columns_priv:记录每个用户对数据列级别的操作权限
- host:存储了某个主机对数据库的操作权限,配合db表对给定的主机上数据库级别的操作权限做更细致的控制,但host表一般很少用,新版本MySQL已经没有host表了
简而言之,mysql数据库的权限的管理,就如同Linux系统或window系统的用户权限的管理。
赋予/撤销某个用户对某个数据库或某个表的某项权力(读、写、更改、删除等)
对于各种数据库的权限的管理的意义:
- 一方面是为了数据的安全,用于数据库的备份和禁止不相关用户的某些操作;
- 一方面是允许某些项目时,某些用户对相关数据库的管理;
- 一方面是为了读写分离,减轻对数据库的压力。
注意:sql语句大小皆可,看个人的使用习惯,关于数据库的权限管理是通过对用户的权限的设置来完成的
MySQL创建用户的基础格式:
在对权限的管理时,通常的写法是创建用户并授权,不会先创建一个用户再进行赋权,通常使用的是下方第两种格式的命令。
MySQL创建用户的格式为:
create user 用户名 identified by '该用户密码';
MySQL赋权的基础格式为:
grant 权限 on 授权对象(库.表) to 用户@地址段 identified by "该用户的密码";
MySQL撤销权限的基础格式为:
MySQL数据库权限示例及解析revoke 撤销相应的权限时,正好与授权相反。
只要把该授权语句的"grant"改为"revoke", “to"改为"from”
【1】授予的权限
all privileges 除with grant option(让授权的用户,也可以将这些权限 grant 给其他用户,权限复制)之外的所有权限
alter 对数据表的修改的权限
alter routine 更改或者删除存储函数或者存储过程的权限
create 创建数据库及表的权限
create routine 更改和弃用存储过程的能力
create temporary tables 创建临时表的权限
create user 创建、重命名和撤销用户的权限
create view 创建视图的权限
delete 数据表中删除数据的权限
drop 允许删除数据库、表、视图的权限
execute 执行存储过程或者调用函数的权限
event 允许查询,创建,修改,删除MySQL事件的权限
file 对系统中的文件(本地文件)读取和写操作的权限;
grant option 用户委派权限的权限
index 创建、删除索引的权限
insert 向表中插入数据的权限
lock tables 允许对拥有select权限的表进行锁表的权限
process 查看所有用户线程/连接的权限
references 5.7.6版本后,允许是否创建外键的权限
reload 允许执行flush,重新加载权限表的权限
replication client 允许用户查询从服务器和主服务器位置的权限
replication slave 允许slave主机通过此用户连接master建立主从的权限
select 允许从表中查看数据的权限
show databases 查看所有数据库名的权限
show view 查看视图详细信息的权限
shutdown 允许关闭数据库实例的权限
super 允许执行一系列数据库管理命令的权限(change、master、kill thread、mysqladmindebug、purge master logs、set global...)
trigger MySQL5.1.6后,允许创建,删除,执行,显示触发器的权限
update 允许修改表中的数据的权限
usage 创建一个用户之后的默认权限,只代表连接,无其他任何权限
【2】MySQL数据库授权注意事项
grant select on 数据库.数据表* to 用户@'%' identified by "密码" with grant option;
with grant option 是让该授权的用户,也可以将它的权限赋予给其他用户
此种授权方法并不提倡,且实际上很少甚至几乎不用。应为权限最好是在DBA的手中,为了安全及方便管理
注意2:
grant 可以作用在单个数据库及单个数据表上,被授权的范围的写法
- *.* 意为所有的数据库及表
- 数据库名.* 意为该数据库下的所有表
- 数据库名.数据表名 意为该数据库下的该数据表
注意3:
被授权的用户的写法
%代替一整个网段
- '用户名'@'%' 意为所有网段都可以用该用户登陆数据库
- '用户名'@'192.168.123.234' 意为只有此IP可使用该用户登陆数据库
- '用户名'@'192.168.122.%' 意为192.168.122该网段的所有主机都可使用该用户登陆数据库
【3】数据库授权
<1>创建用户并授予只读权限
grant select on 数据库名.* to 用户@'%' identified by "密码";
<2>创建用户并授予插入数据权限
grant insert on 数据库名.* to 用户@'%' identified by "密码";
<3>创建用户并授予改变原有数据的权限
grant update on 数据库名.* to 用户@'%' identified by "密码";
<4>创建用户并授予删除数据的权限
grant delete on 数据库名.* to 用户@'%' identified by "密码";
要拥有以上所有权限,可写为一条,权限间用“,”逗号隔开。
grant select, insert, update, delete on 数据库名.* to 用户@'%' identified by "密码";
<5>创建用户并授予所有权限
grant all privileges on 数据库名.数据表明 to 用户@'网段或ip' identified by "密码" ;
<6>创建用户并授予其对数据表的创建的权限
grant create on 数据库名.* to 用户@‘网段或IP’ identified by '密码';
<7>创建用户并授予其对数据表的修改权限
grant alter on 数据库名.* to 用户@‘网段或IP’ identified by '密码';
<8>创建用户并授予其对数据库/表/视图的删除的权限
grant drop on 数据库名.* to 用户@‘网段或IP’ identified by '密码';
<9>创建用户并授予其对数据库下表的设置外键的权限
grant references on 数据库名.* to 用户@‘网段或IP’ identified by '密码';
<10>创建用户并授予其对数据库的设置临时表权限
grant create temporary tables on 数据库名.* to 用户@‘网段/IP’ identified by '密码';
<11>创建用户并授予其对某数据库范围的表设置索引的权限
grant index on 数据库名.* to 用户@‘网段或IP’ identified by '密码';
<12>创建用户并授予其对某数据库范围内创建视图的权限
grant create view on 数据库名.* to 用户@‘网段或IP’ identified by '密码';
<13>创建用户并授予其对某数据库范围内查看视图的权限
grant show view on 数据库名.* to 用户@‘网段/IP’ identified by '密码';
<14>创建用户并授予其对某数据库范围内存储过程、函数的权限
grant create routine on 数据库名.* to 用户@‘网段或IP’; -- now, can show procedure status
grant alter routine on 数据库名.* to 用户@'网段或IP'; -- now, you can drop a procedure
grant execute on 数据库名.* to 用户@'网段或IP';
<15>创建用户并授予其对数据表中列的权限
如有很多列,要用逗号隔开
grant select(列的名字) on 数据库.数据表 to 用户@‘网段或ip’ identified by ‘密码';
<16>创建用户并授予对数据表中的存储过程和函数的权限
grant execute on procedure 数据库名.数据表名 to '用户'@'网段或IP' identified by '密码';
grant execute on function 数据库名.数据表名 to '用户'@'网段或IP' identified by '密码';