如何设置mysql用户的权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置mysql用户的权限相关的知识,希望对你有一定的参考价值。

1、创建新用户

通过root用户登录之后创建

>> grant all privileges on *.* to testuser@localhost identified by "123456" ;  //  创建新用户,用户名为testuser,密码为123456 ;

>> grant all privileges on *.* to testuser@localhost identified by "123456" ;  //  设置用户testuser,可以在本地访问mysql

>> grant all privileges on *.* to testuser@"%" identified by "123456" ;   //  设置用户testuser,可以在远程访问mysql

>> flush privileges ;  //  mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效

2、设置用户访问数据库权限

>> grant all privileges on test_db.* to testuser@localhost identified by "123456" ;  //  设置用户testuser,只能访问数据库test_db,其他数据库均不能访问 ;

>> grant all privileges on *.* to testuser@localhost identified by "123456" ;  //  设置用户testuser,可以访问mysql上的所有数据库 ;

>> grant all privileges on test_db.user_infor to testuser@localhost identified by "123456" ;  //  设置用户testuser,只能访问数据库test_db的表user_infor,数据库中的其他表均不能访问 ;

3、设置用户操作权限

>> grant all privileges on *.* to testuser@localhost identified by "123456" WITH GRANT OPTION ;  //设置用户testuser,拥有所有的操作权限,也就是管理员 ;

>> grant select on *.* to testuser@localhost identified by "123456" WITH GRANT OPTION ;  //设置用户testuser,只拥有【查询】操作权限 ;

>> grant select,insert on *.* to testuser@localhost identified by "123456" ;  //设置用户testuser,只拥有【查询\插入】操作权限 ;

>> grant select,insert,update,delete on *.* to testuser@localhost identified by "123456" ;  //设置用户testuser,只拥有【查询\插入】操作权限 ;

>> REVOKE select,insert ON what FROM testuser  //取消用户testuser的【查询\插入】操作权限 ;
参考技术A 给用户授权
语法:
GRANT 权限1, … , 权限n ON 数据库.* TO 用户名
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;
GRANT ALL ON mydb1.* TO user2@localhost;
撤销权限:
语法:
REVOKE权限1, … , 权限n ON 数据库.* FORM 用户名
REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;

MySQL数据库之——用户权限设置,文内附带MySQL密码忘记如何解决

一、用户管理

1.1 新建用户

命令

CREATE USER ’ 用户名 ’ @ ’ 来源地址 ’ [IDENTIFIED BY [PASSWORD] ’ 密码 ’ ] ;

解释

  • 用户名:指定将要创建的用户名
  • 来源地址:新创建的用户可以在哪些主机上登录,可以使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录,使用通配符 %
  • 密码
    • 使用明文密码直接输入即可,插入到数据库时自动加密
    • 加密密码需要先试用 SELECT PASSWORD( ’ 密码 ’ ); 获取密文,再在语句中添加 PASSWORD ’ 密文 ’
    • 若不适用密码,则忽略 “IDENTIFIEN BY ”部分,但是不建议这样操作

测试

  • 创建用户user01 ,密码使用明文
create user 'user01'@'localhost' identified by '123456';
  • 创建用户user02,密码使用加密
create user 'user02'@'localhost' identified by password '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
  • 获取加密的密码
select password('123456');
+-------------------------------------------+
| password('123456')                        |
+-------------------------------------------+
| *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------------------------------------+

在这里插入图片描述

6.2 查看用户信息

创建的用户保存在 mysql 数据库的 user 表里

#进入MySQL数据库
use mysql;

#查看用户信息
select user,authentication_string,host from user;

在这里插入图片描述

6.3 重命名用户

将user02 改名 user03

rename user 'user02'@'localhost' to 'user03'@'localhost';

在这里插入图片描述

6.4 删除用户

删除 user01 用户

drop user 'user01'@'localhost';

在这里插入图片描述

6.5 修改当前登录用户密码

set password = password('cc123');

6.6 修改其他用户密码

mysql> set password for 'user03'@'localhost' = password('cc123');

6.7 忘记root密码的解决方法

第一步:修改指定配置文件,不适用密码登录MySQL

  • vim /etc/my.cnf
[mysqld]
skip-grant-tables			# 添加该行
  • systemctl restart mysqld.service

在这里插入图片描述

第二步:使用 update 修改密码,刷新数据库

#修改密码
update mysql.user set authentication_string = password('123456') where user ='root';

#刷新数据库
flush privileges;

quit

设置完后,需要把配置文件内的新增内容删除,并重启服务
在这里插入图片描述

二、数据库用户授权

2.1 授权

  • GRANT语句
    • 专门用来设置数据库用户的访问权限
    • 当指定的用户名不存在时,GRANT语句将会创建新的用户
    • 当指定的用户存在时,GRANT语句用于修改用户信息

命令

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
  • 权限列表
    • 用于列出授权使用的各种数据库操作,以逗号分隔
    • 如 “ select , insert , update ”。使用 all 表示所有权限,可授权执行任何操作
  • 数据库名.表名
    • 用于指定授权操作的数据库和表的名称
    • 可以使用通配符 * ,如 dcc.* 表示授权对象为dcc数据库的所有表
  • 用户名@来源地址
    • 指定用户名称和允许访问的客户机地址,即谁能连接,从哪连接
    • 来源地址可以是域名、IP地址 还可以使用通配符 % 表示某个区域或网段内的所有地址
    • 如 %.cc.com、192.168.253.% 等
  • IDENTIFIEN BY
    • 设置用户连接数据库所要用的密码字符串
    • 若省略,则用户的密码为空

测试

  • 设置 user03 用户允许在本地查询 dcc 数据库中的所有数据记录,不能查询其他的
grant select on dcc.* to 'user03'@'localhost' identified by '123456';
flush privileges;			# 设置完需要刷新

use dcc;
show tables;
+---------------+
| Tables_in_dcc |
+---------------+
| ccc01         |
| ccc02         |
| ccc03         |
| dd01          |
| dd02          |
+---------------+

在这里插入图片描述

use mysql;				# 无法查询其他
ERROR 1044 (42000): Access denied for user 'user03'@'localhost' to database 'mysql'
  • 允许用户 user01 在所有终端远程连接 MySQL,并拥有所有权限
grant all [privileges] on *.* to 'user01'@'%' identified by '123456';
flush privileges;				# 刷新数据库

在这里插入图片描述

2.2 查看权限

SHOW GRANTS FOR 用户名@来源地址;

show grants for 'user01'@'%';

在这里插入图片描述

2.3 撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;

revoke all on *.* from 'user01'@'%';

show grants for 'user01'@'%';
+------------------------------------+
| Grants for user01@%                |
+------------------------------------+
| GRANT USAGE ON *.* TO 'user01'@'%' |
+------------------------------------+
1 row in set (0.00 sec)

USAGE 权限表示只能用于数据库登录,不能执行操作,此权限无法回收,所以 revoke 不能删除用户

以上是关于如何设置mysql用户的权限的主要内容,如果未能解决你的问题,请参考以下文章

如何给mysql用户分配权限

mysql中怎样设置用户和管理员的权限?

如何给mysql用户分配权限

如何给mysql用户分配权限

MySQL数据库之——用户权限设置,文内附带MySQL密码忘记如何解决

mysql 权限设置