mysql用户认证二个步骤:
1.mysql首先进行身份认证,身份认证通过IP地址和和用户联名进行确认,root@localhost表示root用户只能从本地进行连接才可以通过认证,此用户从其它任何主机进行的连接都会被拒绝,也就是说同一个用户,如果来自不同的IP地址,则视为不同用户,如root@localhost与[email protected]被视为二个不同的用户。
2.对通过认证的用户赋于相应的权限
3.权限存取的二个过程中会用到mysql(安装mysql时默认创建的)这个数据库中的user,db,host这三个最重要的权限表。先从user表中的host,user,password这三个字段中判断连接的IP,用户名,密码是否存在于表中,如果存在则通过身份验证,否则拒绝连接。如果通过身份验证,刚按照以下权限表的顺序得到数据库权限:user--->db--->tables_priv--->columns_priv,在这几个权限表中权限依次递减,全局权限覆盖局部权限。
一:创建用户:(grant授权法和直接操作权限表法)
示例:grant授权法
grant select on *.* to z1@localhost;
grant select on test1.* to z1@localhost;
grant all privileges on *.* to z1@localhost with grant option;
grant all privileges on *.* to z1@localhost identified by '123' with grant option;
grant select,insert,update on test1.* to 'z2'@'%' identified by '123';
grant super,process,file on *.* to 'z3'@'%'; ##管理权限(不能授于单个数据库,只能跟*.*)
grant usage on *.* to 'z4'@'localhost'; ##使用权限
示例:直接操作权限表法
insert into db (host,db,user,select_priv) values ('%','test1','z6','Y');
二:查看权限
1.show grants for z6@host; ##host可以不写,默认为%,但请注意%默认是不包含localhost在内的,host值为%或为空都代表所有主机可连接,但不包含localhost在内
2.mysql 5.0后的版本也可通过数据库information_schema的表SCHEMA_PRIVILEGES查看权限
select * from schema_privileges where grantee="z1@'localhost";
select * from user where user='z1';
三:更改权限
grant更改权限或revoke回收权限
revoke select,insert on *.* from z2@localhost;
usage权限不能被回收,revoke并不能删除用户
四:修改密码
mysqladmin -u username -h host_name password "newpasswords"
set password for 'z1'@'$' = password('xxxxx'); ##password()函数
set password = password('xxxxx'); ##修改当前自己密码(测试时失败:ERROR 1133 (42000): Can't find any matching row in the user table)
grant usage on *.* to 'z1'@'%' identified by '1234';
update mysql.user set password=password('1234') where user ='root'; ##要记得flush privileges刷新权限
五:删除帐号
drop帐号和修改权限表
drop user z2@localhost;