默认用户

在window系统下的mysql,root没有密码;
在linux系统下,root有密码,非管理员登录到mysql是没有任何权限的,也不允许远程登录;

下面是系统数据库中的User表:
image.png
Host这一列表示开通了哪些主机地址/主机名可以连接mysql数据库:

Host 说明
% 表示任意IP主机都可以远程连接mysql
10.201.56.88 指定10.201.56.88这一台主机有权限访问mysql
localhost 俗称本地,如果Host列是这个名字,则表示root用户必须在安装mysql服务的设备上登录mysql才行
127.0.0.1 表示ipv4的本地地址
::1 表示ipv6的本地地址

创建用户及权限分配

关键字 说明
. 所有数据库对象(数据库下的所有表)
grant 授权
all privileges 授予所有权限
with grant option 授予继续授权的功能
可以分配的权限如下
create 创建数据库,表或索引权限
update 更新权限
drop 去除数据库或表的权限
alter alter更改表,比如添加字段,索引等权限
delete 删除数据的权限
index 索引权限
insert 插入权限
select 查询权限
create view 创建视图权限
execute 执行存储过程的权限

创建用于本地登录的用户

——-》创建用户 t1:该用户只能在安装mysql服务器的主机上进行登录 ;

  1. create user 't1'@'localhost' identified by 'dyx0920';
  2. grant all privileges on *.* to t1@localhost identified by 'dyx0920' with grant option;
  3. flush privileges;

创建用于远程登录的用户

——-》创建用户 t2,该用户可以从10.201.56.180这台主机上登录;

  1. create user 't2'@'10.201.56.180' identified by 'dyx0920';
  2. grant all privileges on *.* to t2@10.201.56.180 identified by 'dyx0920' with grant option;
  3. flush privileges;

创建用于任意登录的用户

——-》创建用户 t3,该用户可以从任意一台主机上进行登陆;

  1. create user 't3'@'%' identified by 'dyx0920';
  2. grant all privileges on *.* to t3@'%' identified by 'dyx0920' with grant option;
  3. flush privileges;

权限分配

  1. grant all privileges on mysql.user to t4@10.201.56.180 identified by 'dyx0920' with grant option;
  2. grant insert,update,select,delete on mysql.user to superuser@10.201.56.88 identified by 'dyx0920' ;
  3. flush privileges; # 刷新数据库
  4. show grants; # 查看权限
  5. show grants for superuser@10.201.56.88; # 查看指定用户的权限
  6. revoke 权限 on 数据库对象 from 用户; # 删除权限

修改密码

  1. set password for test1@localhost = password('test123'); -- 重新设置test1的密码
  2. set password for test1@localhost =(''); -- 取消test1的密码
  3. set password = password('Test@123'); -- 设置当前登录账号的密码
  4. set password = password(''); -- 取消当前登录账号的密码
  5. update mysql.user set password = password('123'), host = '%';
  6. update mysql.user set host = '192.168.2.3';
  7. update mysql.user set host = '192.168.2.%';

删除用户

  1. delete from user where user = 'test1';
  2. drop user test2;
  3. drop user 'test3'@'%';

忘记了root密码

方法一

  1. cat /etc/mysql/debian.cnf
  2. # 查看默认分配的密码, 这个文件里面有着MySQL默认的用户名和用户密码, 用户名默认不是root, 而是debian-sys-maint
  3. [client]
  4. host = localhost
  5. user = debian-sys-maint
  6. password = eyPDN7kavhmjCZUn # 记住这个密码
  7. socket = /var/run/mysqld/mysqld.sock

使用debian-sys-maint用户进入mysql,然后粘贴上面的密码

  1. mysql -u debian-sys-maint -p
  2. Enter password: eyPDN7kavhmjCZUn

登录进mysql之后, 修改root用户和密码后刷新权限

  1. use mysql;
  2. update user set authentication_string=password('dyx0920') where user='root';
  3. flush privileges;

如果修改密码过程中提示以下信息:
image.png
提示这个实际上是与validate_password_policy的值有关,validate_password_policy有以下取值:
image.png
默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符,如:

  1. use mysql;
  2. update user set authentication_string=password('Dyx@0920') where user='root';

重新启动Mysql服务

  1. systemctl start mysql.service # 启动服务
  2. systemctl stop mysql.service # 停止服务
  3. service mysql restart # 重启服务
  4. systemctl status mysql.service # 查看状态

最后使用新改的root和密码登录查看是否正常

方法二

  1. # 首先,修改mysql配置文件
  2. vim /etc/mysql/mysql.conf.d/mysqld.cnf
  3. user = mysql
  4. pid-file = /var/run/mysqld/mysqld.pid
  5. socket = /var/run/mysqld/mysqld.sock
  6. port = 3306
  7. basedir = /usr
  8. datadir = /var/lib/mysql
  9. tmpdir = /tmp
  10. lc-messages-dir = /usr/share/mysql
  11. skip-external-locking
  12. skip-grant-tables # 在skip-external-locking的下一行添加skip-grant-tables,跳过密码校验
  13. # 然后重启mysql后,我们直接无密码登陆:
  14. sudo service mysql restart
  15. # 登录后,修改密码
  16. # 注意:可能遇到这样的问题,这个是你的密码强度不够,请修改密码强度,举例:@ROOT_root_123
  17. mysql
  18. mysql> use mysql;
  19. mysql> update user set authentication_string=password('新密码') where user='root';
  20. mysql> flush privileges;
  21. mysql> quit;
  22. # 好了,大功告成,把配置文件修改回去,注释掉skip-grant-tables,然后重启
  23. sudo service mysql restart