十四、MySql的用户管理

文章目录

一、用户管理

如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。

二、用户

(一)用户信息

MySQL中的用户,都存储在系统数据库mysql的user表中。

cpp 复制代码
mysql> use mysql;
Database changed
mysql> select host,user,authentication_string from user;

字段解释:

  • host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆
  • user: 用户名
  • authentication_string: 用户密码通过password函数加密后的
  • *_priv: 用户拥有的权限

(二)创建用户

1.语法:

cpp 复制代码
create user '用户名'@'登陆主机/ip' identified by '密码';

2.案例:

cpp 复制代码
mysql> create user 'whb'@'localhost' identified by '12345678';
cpp 复制代码
Query OK, 0 rows affected (0.06 sec)
mysql> select user,host,authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user           | host      | authentication_string                    |
+---------------+-----------+-------------------------------------------+
| root           | %         | *A2F7C9D334175DE9AF4DB4F5473E0BD0F5FA9E75|
| mysql.session  | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE|
| mysql.sys      | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE|
| mt 			 | localhost | *84AAC12F54AB666ECFC2A83C676908C8BBC381B1| --新增用户
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
-- 此时便可以使用新账号新密码进行登陆啦
--备注:可能实际在设置密码的时候,因为mysql本身的认证等级比较高,一些简单的密码无法设置,会爆出
如下报错:
-- ERROR 1819 (HY000): Your password does not satisfy the current policy
requirements
-- 解决方案:https://blog.csdn.net/zhanaolu4821/article/details/93622812
--查看密码设置相关要求:SHOW VARIABLES LIKE 'validate_password%';

(三) 删除用户

1.语法:

cpp 复制代码
drop user '用户名'@'主机名'

2.示例:

cpp 复制代码
mysql> select user,host,authentication_string from user;
mysql> select user,host,authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user           | host      | authentication_string                    |
+---------------+-----------+-------------------------------------------+
| root           | %         | *A2F7C9D334175DE9AF4DB4F5473E0BD0F5FA9E75|
| mysql.session  | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE|
| mysql.sys      | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE|
| mt 			 | localhost | *84AAC12F54AB666ECFC2A83C676908C8BBC381B1| --新增用户
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
mysql> drop user whb; --尝试删除
ERROR 1396 (HY000): Operation DROP USER failed for 'mt'@'%' -- <= 直接给个用户名,
不能删除,它默认是%,表示所有地方可以登陆的用户
mysql> drop user 'mt'@'localhost'; --删除用户
Query OK, 0 rows affected (0.00 sec)
+---------------+-----------+-------------------------------------------+
| user           | host      | authentication_string                    |
+---------------+-----------+-------------------------------------------+
| root           | %         | *A2F7C9D334175DE9AF4DB4F5473E0BD0F5FA9E75|
| mysql.session  | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE|
| mysql.sys      | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE|
| mt 			 | localhost | *84AAC12F54AB666ECFC2A83C676908C8BBC381B1| --新增用户
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

(四)修改用户密码

1.语法:

  • 自己改自己密码
cpp 复制代码
set password=password('新的密码');
  • root用户修改指定用户的密码
cpp 复制代码
set password for '用户名'@'主机名'=password('新的密码');
cpp 复制代码
mysql> select host,user, authentication_string from user;
cpp 复制代码
+---------------+-----------+-------------------------------------------+
| user           | host      | authentication_string                    |
+---------------+-----------+-------------------------------------------+
| root           | %         | *A2F7C9D334175DE9AF4DB4F5473E0BD0F5FA9E75|
| mysql.session  | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE|
| mysql.sys      | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE|
| mt 			 | localhost | *84AAC12F54AB666ECFC2A83C676908C8BBC381B1| --新增用户
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
cpp 复制代码
mysql> set password for 'mt'@'localhost'=password('87654321');
Query OK, 0 rows affected, 1 warning (0.00 sec)
cpp 复制代码
mysql> select host,user, authentication_string from user;`+---------------+-----------+-------------------------------------------+
| user           | host      | authentication_string                    |
+---------------+-----------+-------------------------------------------+
| root           | %         | *A2F7C9D334175DE9AF4DB4F5473E0BD0F5FA9E75|
| mysql.session  | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE|
| mysql.sys      | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE|
| mt 			 | localhost | *5D24C4D94238E65A6407DFAB95AA4EA97CA2B199| --新增用户
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)`

三、数据库的权限

MySQL数据库提供的权限列表:

(一)给用户授权

刚创建的用户没有任何权限。需要给用户授权。

1.语法

cpp 复制代码
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']

2.说明

  • 权限列表,多个权限用逗号分开
cpp 复制代码
grant select on ...
grant select, delete, create on ....
grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
  • . : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
  • 库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)
  • identified by可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户

3.案例:

cpp 复制代码
--使用root账号
--终端A
mysql> show databases;
cpp 复制代码
--给用户whb赋予test数据库下所有文件的select权限
mysql> grant select on test.* to 'whb'@'localhost';
Query OK, 0 rows affected (0.01 sec)
cpp 复制代码
--使用whb账号
--终端B

(二) 回收权限

1.语法:

cpp 复制代码
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';

2.示例:

cpp 复制代码
-- 回收mt对test数据库的所有权限
--root身份,终端A
mysql> revoke all on test.* from 'mt'@'localhost';
Query OK, 0 rows affected (0.00 sec)
相关推荐
又见情义2 小时前
RK3568 Android 13 SDK 开机自动开启共享热点实践
android
mmsx3 小时前
return false 不是拦截:一次按键触发两个动作的事件冒泡陷阱
android·bug
DU_YULIN3 小时前
Camera HAL ThreadManager概述
android·camera hal
淡淡的香烟4 小时前
Android中的MQTT通信原理解析
android·物联网
淡淡的香烟4 小时前
Android Camera开发详解
android·音视频
mmsx5 小时前
基于 Android 的校园信息管理系统源码
android·java·okhttp
菀亓6 小时前
ubuntu系统mysql安装
mysql
YF02116 小时前
如何进入Android工程模式
android
程序员贺加贝6 小时前
别被 saveBatch 骗了:一次 MyBatis-Plus 批量插入性能排查
mysql
l1258656 小时前
# RAG上线评估指标体系:六大核心指标与压测实战全解析
数据库·人工智能·python·mysql·langchain·milvus