用户权限管理:在不同的项目中给不同的角色(mysql客户端用户,通常为开发者)不同的权限,为了保证数据库的数据安全。

用户管理

mysql需要客户端进行连接认证才能进行服务器操作:需要用户信息。mysql中所有的用户(指mysql客户端用户)信息都是保存在mysql数据库下的user表中。该表采用复合主键(host + user)。

grant_revoke mysql 用户权限 mysql中用户和权限的作用_密码修改

grant_revoke mysql 用户权限 mysql中用户和权限的作用_密码修改_02

注意:\g 的作用是分号和在sql语句中写’;’是等效的 
            \G 的作用是将查到的结构旋转90度变成纵向

1、创建用户

方式一:直接使用root用户在user表中插入记录。(不推荐)

方式二:使用SQL指令创建用户

create user '用户名'@'主机地址' identified by '明文密码';
create user 用户名;  //创建 谁都可以访问,不需要密码 的用户

grant_revoke mysql 用户权限 mysql中用户和权限的作用_用户权限管理_03

注意:主机地址可以使用'%'或者''代替,表示无限制。

2、删除用户

drop user '用户名'@'主机地址';
drop user 用户名; //删除主机地址为'' 或者 '%' 的用户

3、修改用户密码

mysql中提供了多种修改密码的方式,基本上都必须使用对应提供的一个系统函数:password()。需要靠该函数对密码进行加密处理。

方式一:使用专门的SQL指令来修改密码

set password for 用户名 = password('新的明文密码');

方式二:使用更新语句update来修改表

update mysql.user set password = password('新的明文密码') where user = '用户名' and host='主机地址';

MySQL8使用以上方案修改密码后,还是能使用mysql直接登录。
是因为mysql8.0 之前的版本加密规则是 mysql_native_password,mysql8 之后,加密规则是 caching_sha2_password。所以我们需要设置加密规则为mysql_native_password即可。

use mysql;ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码'; FLUSH PRIVILEGES;

权限管理

1、权限分类

mysql中将权限分3类:数据权限、结构权限、管理权限

数据权限:增删改查(select/update/delete/insert)

结构权限:结构操作(create/drop)

管理权限:用户操作权限(create user/grant/revoke)

2、查询权限

show grants for 登录名@IP;

3、grant:授予权限

将权限分配给指定用户

grant 权限列表/all privileges on 数据库.表名 to 用户;

grant_revoke mysql 用户权限 mysql中用户和权限的作用_密码修改_04

注:1、权限列表:使用逗号分隔,但是可以使用 all privileges(表示全部权限)。

       2、数据库.表名:可以是单表(数据库名.表名)、可以是某个数据库(数据库名.*)、可以是整库(*.*)

4、revoke:权限回收

revoke 权限列表/all privileges on 数据库.表名 from 用户;

5、flush:刷新权限

将当前对用户的权限操作,进行一个刷新,将操作的具体内容同步到对应的表中。

flush privileges;

密码丢失解决方案

普通用户密码丢失可以通过root账号修改。但是如果忘记root用户密码,就需要去找回或者重置root用户密码。

1、停止服务

net stop mysql

2、重启服务器,但是跳过权限

mysqld.exe --skip-grant-tables

grant_revoke mysql 用户权限 mysql中用户和权限的作用_mysql_05

注:当前启动的服务器没有权限概念。即任何客户端,不需要任何用户信息都可以直接登录,而且是root权限(新开客户端,直接使mysql登录即可)。

grant_revoke mysql 用户权限 mysql中用户和权限的作用_数据库_06

3、修改root用户密码,需要指定用户名。

grant_revoke mysql 用户权限 mysql中用户和权限的作用_mysql_07

4、进程中关闭mysql服务器(命令行关闭服务器有可能会失效),然后正常重启即可。

ubuntu安转MySQL并设置root密码

1、安装成功后,默认登录

mysql -uroot -p -- 直接回车
Enter password:  -- 新安装的MySQL,root账户没有默认密码,直接回车
> mysql  -- 登录成功

2、设置root账户密码为:root 

-- 设置root账户密码为:root
update user set plugin='mysql_native_password' where user='root';
update user set authentication_string=PASSWORD('root') where user='root';

MySQL允许远程访问(ubuntu)

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

 注释掉bind-address = 127.0.0.1即可。

Mysql8报错:ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation

原因:
MySQL8版本中新增了一个system_user帐户类型,由于root用户没有SYSTEM_USER权限,导致错误出现。
为root添加权限系统用户权限即可。

grant system_user on *.* to 'root';
flush privileges;