01. 授权问题
0.如果mysql没有初始化密码,那么首先初始化密码
mysql –u root mysql>update user set password=PASSWORD('123456') where user='root';
1. 假设有两台主机,本文中的所有实验都是在这两台主机下进行测试
A主机:192.168.3.48(Master)
B主机:192.168.3.8(Slaver)
-->登陆A主机
-->在A主机查看所有的数据库
-->在A主机切换数据库到mysql,查看A主机中数据库mysql下的所有table
-->查看目前A主机中的所有用户:发现A主机只有本地用户root
-->在B主机上尝试使用root账户登录A主机的MySQL服务器:提示不允许登录访问
---------------------------------------华丽丽的分割线---------------------------------------
第一种方式
-->在A主机上创建并授权B主机可以登录的新的用户:用户名test,密码test,B主机的IP是192.168.3.8
-->查看A主机中此时的用户,发现多了test用户,说明创建成功
-->查看test用户的权限:发现是USAGE,表明B主机只有登录A主机mysql服务器的权限其他什么都不能操作
-->在B主机上使用test,test登录,发现登录成功,但是没有任何权限
-->在A主机上授予test@192.168.3.8所有权限
-->B主机退出重新登录用户名test,密码test,此时在B主机上就可以对A主机上的mysql服务器进行任何操作了,相当于A主机上的root用户
第二种方式
第三种方式
1.通过改表设置所有的IP可以登录
mysql -u root –p mysql>use mysql; mysql>update user set host = '%' where user = 'root'; mysql>select host, user from user;
使用root帐号和root的原始密码可以在任何主机登录
2.通过授权所有的IP可以登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges;
授权用户root使用密码123456从任意主机连接到mysql服务器
3.通过授权指定的IP可以登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'218.12.50.60' IDENTIFIED BY 'mark' WITH GRANT OPTION; flush privileges;
授权用户root使用密码mark从指定ip为218.12.50.60的主机连接到mysql服务器:
4.权限限制
授权表达式:
grant 权限 on 数据库对象 to 用户
数据对象为 *.*:对mysql服务器中所有的数据库和表进行授权
数据对象为dbname.*:对mysql服务器中单个数据库dbname下的所有表进行授权
数据对象为dbname.user:对mysql服务器中单个数据库dbname下的user表进行授权
解除授权表达式
revoke 权限 on 数据库对象 from 用户
数据对象的界定与上面相同
mysql权限表达式
授权普通用户对数据库testdb的所有表CRUD的权限: grant select on testdb.* 'general_user'@'%' grant insert on testdb.* to 'general_user'@'%' grant update on testdb.* to 'general_user'@'%' grant delete on testdb.* to 'general_user'@'%' grant select(id,name,birth) on testdb.* 'general_user'@'%' 可以直接使用: grant select, insert, update, delete on testdb.* to 'general_user'@'%' 授权数据库开发人员权限: grant create on testdb.* to developer@'192.168.0.%'; grant alter on testdb.* to developer@'192.168.0.%'; grant drop on testdb.* to developer@'192.168.0.%'; grant references on testdb.* to developer@'192.168.0.%'; grant create temporary tables on testdb.* to developer@'192.168.0.%'; grant index on testdb.* to developer@'192.168.0.%'; grant create view on testdb.* to developer@'192.168.0.%'; grant show view on testdb.* to developer@'192.168.0.%'; grant create routine on testdb.* to developer@'192.168.0.%'; grant alter routine on testdb.* to developer@'192.168.0.%'; grant execute on testdb.* to developer@'192.168.0.%'; grant all privileges on testdb to dba@'localhost'