默认用户
在window系统下的mysql,root没有密码;
在linux系统下,root有密码,非管理员登录到mysql是没有任何权限的,也不允许远程登录;
下面是系统数据库中的User表:
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服务器的主机上进行登录 ;
create user 't1'@'localhost' identified by 'dyx0920';grant all privileges on *.* to t1@localhost identified by 'dyx0920' with grant option;flush privileges;
创建用于远程登录的用户
——-》创建用户 t2,该用户可以从10.201.56.180这台主机上登录;
create user 't2'@'10.201.56.180' identified by 'dyx0920';grant all privileges on *.* to t2@10.201.56.180 identified by 'dyx0920' with grant option;flush privileges;
创建用于任意登录的用户
——-》创建用户 t3,该用户可以从任意一台主机上进行登陆;
create user 't3'@'%' identified by 'dyx0920';grant all privileges on *.* to t3@'%' identified by 'dyx0920' with grant option;flush privileges;
权限分配
grant all privileges on mysql.user to t4@10.201.56.180 identified by 'dyx0920' with grant option;grant insert,update,select,delete on mysql.user to superuser@10.201.56.88 identified by 'dyx0920' ;flush privileges; # 刷新数据库show grants; # 查看权限show grants for superuser@10.201.56.88; # 查看指定用户的权限revoke 权限 on 数据库对象 from 用户; # 删除权限
修改密码
set password for test1@localhost = password('test123'); -- 重新设置test1的密码set password for test1@localhost =(''); -- 取消test1的密码set password = password('Test@123'); -- 设置当前登录账号的密码set password = password(''); -- 取消当前登录账号的密码update mysql.user set password = password('123'), host = '%';update mysql.user set host = '192.168.2.3';update mysql.user set host = '192.168.2.%';
删除用户
delete from user where user = 'test1';drop user test2;drop user 'test3'@'%';
忘记了root密码
方法一
cat /etc/mysql/debian.cnf# 查看默认分配的密码, 这个文件里面有着MySQL默认的用户名和用户密码, 用户名默认不是root, 而是debian-sys-maint[client]host = localhostuser = debian-sys-maintpassword = eyPDN7kavhmjCZUn # 记住这个密码socket = /var/run/mysqld/mysqld.sock
使用debian-sys-maint用户进入mysql,然后粘贴上面的密码
mysql -u debian-sys-maint -pEnter password: eyPDN7kavhmjCZUn
登录进mysql之后, 修改root用户和密码后刷新权限
use mysql;update user set authentication_string=password('dyx0920') where user='root';flush privileges;
如果修改密码过程中提示以下信息:
提示这个实际上是与validate_password_policy的值有关,validate_password_policy有以下取值: 
默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符,如:
use mysql;update user set authentication_string=password('Dyx@0920') where user='root';
重新启动Mysql服务
systemctl start mysql.service # 启动服务systemctl stop mysql.service # 停止服务service mysql restart # 重启服务systemctl status mysql.service # 查看状态
最后使用新改的root和密码登录查看是否正常
方法二
# 首先,修改mysql配置文件vim /etc/mysql/mysql.conf.d/mysqld.cnfuser = mysqlpid-file = /var/run/mysqld/mysqld.pidsocket = /var/run/mysqld/mysqld.sockport = 3306basedir = /usrdatadir = /var/lib/mysqltmpdir = /tmplc-messages-dir = /usr/share/mysqlskip-external-lockingskip-grant-tables # 在skip-external-locking的下一行添加skip-grant-tables,跳过密码校验# 然后重启mysql后,我们直接无密码登陆:sudo service mysql restart# 登录后,修改密码# 注意:可能遇到这样的问题,这个是你的密码强度不够,请修改密码强度,举例:@ROOT_root_123mysqlmysql> use mysql;mysql> update user set authentication_string=password('新密码') where user='root';mysql> flush privileges;mysql> quit;# 好了,大功告成,把配置文件修改回去,注释掉skip-grant-tables,然后重启sudo service mysql restart
