安装好mysql数据库后,第一次启动mysqld服务的时候,会进行初始化,初始化的结果就是会预先创建内置的几个数据库,比如mysql和test等。
-
用命令查看一下数据库
image.png其中,information_schema数据库是mysql在运行过程中在内存中虚拟出来的表,存储着mysql运行过程中的一些数据,在磁盘上并没有文件存在。
在磁盘上,每个数据库文件就像一个文件夹一样(我们手动mkdir一个文件夹,在show databases也能看得到)的存在。
-
在数据库mysql中
image.png
其中的user数据表,存放着mysql用户的一些信息。
mysql的用户都是以 “用户名@主机(或域名)”来标记的,即该用户在哪个或哪些主机上登录('%'代表所有主机都可以),当我们通过mysql -u 用户名 -p -h 服务器地址,来登录mysql服务器的时候,mysql会在user表中检索是否有当前用户,以及是否允许该客户机连接到服务器。即user表中的host字段是允许对应用户登录的客户端主机。用户名@主机(或域名)才算是一个完整的用户名标识。
注意其中的localhost和127.0.01,只有在服务器上登录mysql客户端时,mysql才会判断客户端主机来源是这两个。而zhang是当前机器的hostname。默认情况下,root用户是不允许服务器以外的客户端(注意:用ssh登录到服务器,再在服务器上连接mysql服务器,算是在服务器本机登录,是允许root用户连接的)登录的。其它客户端连接时,默认会被拒绝:
注:root@192.168.0.102是我后面添加的,添加以后就允许root用户在该客户机上登录了。
所以如果想让服务器本机以外的客户端能够登录就要创建对应的用户,或者将对应host字段改成相应的客户端主机(或者是'%',允许任何客户端主机)。
- 查看当前登录用户:
假如我们创建了一个网段用户,root@'192.168.0.%',在同网段的某台机器上登录mysql服务器,
①、select user();:显示结果为,root@192.168.0.102
②、select current_user; :显示结果为,root@192.168.0.%
-
创建用户的方式:
方式一:
①、创建用户:create user 用户名@'允许的客户端主机' identified by '密码';(注:如果用户名后面不跟@'主机',表示@'%',即允许该用户在任何客户端主机登录。另外在所有的语法里,不管是查询还是创建,还是授权,只写用户名,就表示用户名@'%',比如root@'192.168.0.192'和root@'%'不是同一个用户)
image.png②、授权:
1、查看授权:
show grants for 用户名@‘客户机’;
注:“ GRANT USAGE ON . TO 'yu'@'%' IDENTIFIED BY PASSWORD '*F5CBECEFDCF62565C27D2EA7034168E634342EA3' ”
其中,USAGE表示具体权限(登录数据库的权限);*.*,第一个*表示所有数据库,第二个*表示数据库的所有表。
image.png
2、授权:grant 具体权限 on 数据库.数据表 to 用户[@'客户机'];
授权完成后要刷新内存中的权限列表:flush privileges;才能即时生效。
方式二:
在授权的同时创建用户,如果授权的用户不存在,可以在授权的同时创建:
grant 具体权限 on 数据库.数据表 to 用户[@'客户机'] identified by '密码';(注:ALL privileges表示所有具体权限)
记得要刷新权限列表:
flush privileges; 修改用户密码
①、set password for 用户[@'客户机'] = password('密码');
注:后面这个password是加密函数。
修改完密码:flush privileges;
②、mysqladmin -u用户名 -h客户机 -p password '新密码';
注:这是在linux命令行下执行,后面的password同样是加密函数。
③、修改mysql的user表的password字段:
update user set password=password('新密码') where user = 'user' and host = 'host';
修改完密码:flush privileges;