MySQL:数据库用户

news2024/9/25 13:25:05

数据库用户

在关系型数据库管理系统中,数据库用户(USER)是指具有特定权限和访问权限的登录账户。每个用户都有自己的用户名和密码,以便系统可以通过认证来识别他们的身份。数据库用户可以登录数据库,在其中执行各种类型的操作,如创建表格、插入、更新和删除数据、执行查询等。

数据库用户可以分为多个级别,如超级用户、普通用户、只读用户等,他们各自具有不同的权限和访问权限。超级用户具有完全控制数据库的权限,包括创建和删除数据库、用户、表格等,而只读用户只能查看数据库中的数据,无法对其进行任何修改操作。

用户权限

MySQL 的 USER 权限级别:

  1. 全局性管理权限:作用于整个 MySQL 实例级别

  2. 数据库级别:作用于指定的某个数据库上或者所有数据库上

  3. 数据库对象级别权限:作用于指定的数据库对象上(表或者视图)

MySQL 的 USER 权限:

![[MySQL User Privilege.png]]

Mysql数据库用户权限存储在 MySQL 库的 user, db, tables_priv, columns_priv, procs_priv 这几个系统表中,MySQL实例启动后就加载到内存中:

  1. user:存放用户账户信息以及全局级别(所有数据库)权限,(存放了那些用户可以访问那些数据库的权限)

  2. db:数据库级别权限,决定了来自哪些主机的哪些用户可以访问此数据库

  3. tables_priv:存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的那张表

  4. columns_priv:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的字段

  5. procs_priv:存放存储过程和函数级别的权限

root 用户

root 用户是具有最高权限的用户,拥有 MySQL 中的所有权限。作为 root 用户,可以执行任何操作,包括创建用户、授予权限、修改数据库结构等。

然而,出于安全考虑,使用 root 用户进行日常任务是不推荐的,应该创建一个具有适当权限的普通用户来执行常规操作。通过这种方式,可以限制特权的滥用和减少潜在的安全风险。

创建用户

使用 CREATE USER 语句创建 MySQL 用户

CREATE USER 'username'@'host' IDENTIFIED BY 'password'
  • username:要创建的用户名,
  • host:用户允许登录的主机名或 IP 地址,
  • password:用户的密码。
CREATE USER 'user' IDENTIFIED BY '123456';

-- 所有ip都可用账号
CREATE USER 'user'@'%' IDENTIFIED BY '123456';

-- 本地可用账号
CREATE USER 'user'@'localhost' IDENTIFIED BY '123456';

-- 指定 IP 可用账号
CREATE USER 'user'@'192.138.17.2' IDENTIFIED BY '123456';

-- 指定网段可用账号
CREATE USER 'user'@'192.138.17.%' IDENTIFIED BY '123456'; 
SQL 创建用户
CREATE USER <username> [WITH][DBA|RESOURCE|CONNECT];

只有系统的超级用户才有权创建一个新的数据库用户。

CREATE USER 命令中如果没有指定创建的新用户的权限,默认该用户拥有 CONNECT 权限。

  • 拥有 CONNECT 权限的用户不能创建新用户,不能创建模式,也不能创建基本表,只能登录数据库。由数据库管理员或其他用户授予他应有的权限,根据获得的授权情况他可以对数据库对象进行权限范围内的操作。

  • 拥有 RESOURCE 权限的用户能创建基本表和视图,成为所创建对象的属主,但不能创建模式 SCHEMA(数据库),不能创建新的用户。数据库对象的属主可以使用 GRANT 语句把该对象上的存取权限授予其他用户。

  • 拥有 DBA 权限的用户是系统中的超级用户,可以创建新的用户、创建模式、创建基本表和视图等;DBA 拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户。

修改用户信息

修改用户名

使用 RENAME USER 语句修改用户名:

RENAME USER 'username' TO 'newname';
设置用户密码

MySQL 数据库一般在创建用户时就给用户设置了密码,如果在用户创建完成后想修改密码,可通过相应的命令来完成。

  1. 修改其他用户密码(当前用户要有权限),一般在 root 用户下操作

使用 MySQL 语句

ALTER USER 'username'@'host' IDENTIFIED BY 'newPassword';

SET PASSWORD FOR 'username'@'host'=PASSWORD('newpassword');

GRANT USER ON permission 
TO 'username'@'host' IDENTIFIED BY 'newPassword';

在系统命令行下修改:

mysqladmin –u uername –h host password "newpassword"
  1. 修改当前用户密码
SET PASSWORD FOR 'username' = PASSWORD('new_password');

ALTER USER user() IDENTIFIED BY 'new_password';

用户的锁定与解锁

在创建用户时或用户创建后可以将用户锁定,用户被锁定后,此用户无法完成登录:

-- 在创建用户时锁定用户
CREATE USER 'username'@'host' IDENTIFIED 'password' 
ACCOUNT LOCK;
-- 用户创建后,锁定用户
ALTER USER 'username'@'host' ACCOUNT LOCK;
-- 解锁用户
ALTER USER 'username'@'host' ACCOUNT LOCK;

密码过期策略

自 MySQL 5.7.4 版本开始,MySQL 引入了默认密码过期策略,用于增强安全保护机制。

默认过期策略要求新创建的 MySQL 用户在第一次登录时强制更改其初始密码,以避免安全漏洞

当创建新用户时,MySQL 会为其分配一个默认密码,并将用户设置为需要修改密码。一旦用户登录 MySQL 服务器,就会提示用户修改其初始密码。如果用户在规定时间内(default_password_lifetime 变量定义的时间,默认为 360 天)没有更改密码,系统将拒绝该用户的登录请求。

设置密码过期策略

Mysql 数据库用户同系统用户一样,可以设置密码过期策略,密码的过期天数可以在配置文件里面设置,也可以通过命令设置。

配置文件中设置

选项:default_password_lifetime="过期天数" :如果设置为0,则密码永不过期。

通过 MySQL 命令设置

通过命令为每个用户设置密码的过期天数则会覆盖系统配置文件中的设置。

-- 设置过期天数
ALTER USER 'username'@'localhost' PASSWORD
EXPIRE INTERVAL number day;
-- 设置密码不过期
ALTER USER 'username'@'localhost' PASSWORD
EXPIRE never; 
-- 默认过期策略
ALTER USER 'username'@'localhost' PASSWORD
EXPIRE DEFAULT; 
-- 手动强制密码过期
ALTER USER 'username'@'localhost' PASSWORD EXPIRE; 
自定义密码过期策略

如果存在自定义密码策略,则 MySQL 会使用自定义策略,而不是默认密码过期策略。如果需要禁用默认密码过期策略,可以使用以下命令:

SET GLOBAL default_password_lifetime = 0;

禁用默认密码过期策略,并允许在创建或更改用户时将其密码永久化。

查看默认密码过期策略下用户的状态

要查看默认密码过期策略下用户的状态,可以使用以下命令:

SELECT User, Host, plugin, authentication_string, password_expired FROM mysql.user;
  • UserHost 代表用户名和主机名
  • authentication_string 代表用户的加密密码
  • plugin 代表用户的身份验证插件
  • password_expired 字段表示用户是否需要更改密码。

MySQL 数据库用户资源限制

通过修改 MySQL 数据库资源限制可以限制用户在某个时间段内连接 MySQL 数据库的时间、执行语句的次数等。

  1. 设置参数:
  • MAX_CONNECTIONS_PER_HOUR:一个用户在一个小时内可以连接 MySQL 的时间

  • MAX_USER_CONNECTIONS:一个用户可以在同一时间连接 MySQL 实例的数量

  • MAX_EXECUTION_TIME:限制单个查询执行的最大时间。

  • MAX_QUERIES_PER_HOUR:查询速率限制,一个用户在一个小时内可以执行查询的次数(基本包含所有语句)

  • MAX_UPDATES_PER_HOUR:一个用户在一个小时内可以执行修改的次数(仅包含修改数据库或表的语句)

  • MAX_ALLOWED_PACKET:限制单个数据包传输的最大大小

  • QUERY_CACHE_SIZE:限制查询缓存的最大大小

  • MAX_CONNECT_ERRORS:限制在指定时间内允许的连接失败次数

  1. 设置 MySQL 数据库用户资源限制

设置 MySQL 数据库用户资源限制时可以在创建用户时设置,也可以在用户创建完成后通过命令设置:

-- 创建用户时进行资源控制
CREATE USER 'username'@'localhost' INDENTIFIED BY '123456'
WITH
MAX_QURIES_PER_HOUR 20
MAX_CONNECTIONS_PER_HOUR 5 
MAX_USER_CONNECTIONS 1;
-- 对已存在的用户进行资源控制
ALTER USER 'username'@localhost
MAX_UPDATES_PER_HOUR 10
MAX_CONNECTIONS_PER_HOUR 5 
MAX_USER_CONNECTIONS 1;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第二十天学习笔记2024.8.2

安装mysql 1.安装软件包 centos7 中安装 mysql 8.x_wffkg-CSDN博客 2.解压 tar -xf mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 3.卸载mariadb yum remove -y *mariadb* 4.安装&#xff08;缺什么依赖补什么&#xff09; mysql-community-server-8.0.33-1.el7.x86_64.rpm 5.…

APP逆向 day26unidbg下-pdd(anti)案例

一.前言 今天我们讲unidbg的下篇&#xff0c;也就是unidbg基础的最后一个部分&#xff0c;我们上节课也有补环境&#xff0c;比如补java环境&#xff0c;补安卓环境&#xff0c;这节课我们讲的肯定比这些都要难&#xff0c;我会给出一个之前讲过的案例&#xff0c;然后会讲一个…

如何建立与众不同的市场洞察能力【深度】

来源&#xff1a;战略研发领航 建立与众不同的市场洞察机制&#xff0c;展示了如何在组织中建立一种以数据和洞察为核心的文化&#xff0c;并通过4S周期&#xff08;架构、探查、塑造、成型&#xff09;的洞察工作方法论&#xff0c;指导领导者和团队在各个层级上进行更有效的思…

【C语言】C语言期末突击/考研--函数

目录 一、函数的声明与定义-嵌套调用 1.1.函数的声明与定义 1.2.函数的分类与调用 二、函数的递归调用 三、局部变量与全局变量 3.1.全局变量解析形参实参解析 3.2.局部变量与全局变量 四、练习题及解析 一、函数的声明与定义-嵌套调用 1.1.函数的声明与定义 函数间的…

Code Review 这件事,AI 比人类强 10 倍

1.引言 代码审查&#xff0c;也就是 Code Review&#xff08;以下简称 CR&#xff09;&#xff0c;一直是 IT 行业讨论的热门话题&#xff0c;因为它在很大程度上决定了公司的工程质量。 但是&#xff0c;人工 CR 的成本的是很高的&#xff0c;所以在实际落地场景&#xff0c…

latex换行\left[和\right]编译报错-解决方案

简而言之&#xff1a;\\ 换成 \right.\\ , & 换成 &\left. 来个例子就知道了&#xff1a; 原本的公式是&#xff1a; \begin{align}\label{up_critic} L_Q(\theta) & \mathbb{E}\left[\frac{1}{2}(Q_\theta(\mathcal{S}_{k,t}^m, {A}_{k,t}^m) - ({R}_{k,t}^m …

07030405复杂可编程逻辑器件CPLD现场可编程阵列FPGA

复杂可编程逻辑器件CPLD&现场可编程阵列FPGA 7.3 复杂可编程逻辑器件CPLD7.3.1CPLD的结构 7.4现场可编程门阵列FPGA7.4.1FPGA实现逻辑功能的基本原理7.4.2FPGA结构简介1.可编程逻辑块2.I/O块3.可编程连线资源CPLD与FPGA的区别 7.5可编程逻辑器件开发过程简介编程条件 7.3 复…

细说文件操作

你好&#xff01;感谢支持孔乙己的新作&#xff0c;本文就结构体与大家分析我的思路。 希望能大佬们多多纠正及支持 &#xff01;&#xff01;&#xff01; 个人主页&#xff1a;爱摸鱼的孔乙己-CSDN博客 目录 1.什么是文件 1.1.程序设计文件 1.1.1.程序文件 1.1.2.数据文件…

使用EntityFramework8的学习和开发过程中一些经验

前言&#xff1a; 本篇文章主要记录自己在EF8的学习和使用过程中的碰到一些坑和自己琢磨的一些解决问题的方法以及过程。 问题汇总&#xff1a; 一、Code First 模式下生成表中字段的没有按照我们想要的次序排列 实体上增加注解 [Column(Order 0)] 可以通过Order来控制字段…

[CISCN2019 华北赛区 Day1 Web1]Dropbox 1

目录 题目分析功能测试代码读取index.phpdownload.phpdelete.phpclass.php 关键代码审计user类FileList类File类思路 解题步骤php脚本解题 题目分析 功能测试 注册登录后来到上传文件界面&#xff0c;通过改后缀&#xff0c;改文件头&#xff0c;改content-type&#xff0c;上…

如何养护我们的头发一

正常头发含水量10-13% 头发含水量低 头发就会干燥 受到损伤 头发保水能力弱 保养头发,最重要的是防止头发头发的流水. 正确的洗涤方法 干性头发,一般3天洗一次 油性头发,一般1天洗一次 中性头发,一般2天洗一次 (2)正确的洗发步骤 选择好梳子建议选用木梳或牛角梳 按摩头皮…

释疑 803-(2)物理层 整理总结

目录 2-01 物理层要解决哪些问题?物理层的主要特点是什么? 2-02 规程与协议有什么区别? 2-03 试给出数据通信系统的模型并说明其主要组成构件的作用。 2-04 试解释以下名词&#xff1a;数据、信号、模拟数据、模拟信号、基带信号、带通信号、数字数据、数字信号、码元、…

PHP智能问诊导诊平台-计算机毕业设计源码75056

摘 要 智能问诊导诊平台作为一种智能化医疗服务工具&#xff0c;利用PHP语言开发&#xff0c;旨在为用户提供便捷的在线问诊和导诊服务。该平台集成了智能算法和医疗数据&#xff0c;实现了智能化的病情诊断和治疗建议&#xff0c;帮助用户更快速地获取医疗信息和建议。用户可…

未授权访问

一、Redis 未授权访问 redis-cli -h 192.168.4.176-p6379 &#xff08;使用这个连接&#xff09; 连接成功后使用info测试 二、MongDB 未授权访问 使用fofa搜mongdb端口复制ip到Navicat,连接 】 三、Zookeeper未授权访问漏洞 使用fofa 搜索2181端口使用下面命令在kali在…

5、SystemC行为级建模

1、sc_port关联sc_interface和channel。sc_module聚合sc_module、var、process和sc_port。sc_cthread和sc_method继承sc_thread。 sc_interface中声明很多虚函数&#xff0c;作为接口函数实现接口功能&#xff0c;如send()、recv()等。可以通过发送和接收模块的端口调用(sc_in…

CCF编程能力等级认证GESP—C++3级—20240629

CCF编程能力等级认证GESP—C3级—20240629 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)移位寻找倍数 单选题&#xff08;每题 2 分&#xff0c;共 30 分…

【基础篇】MySQL数据库详解:基础知识详解

一、SQL分类 1.DDL2.DML3.DQL4.DCL二、函数 1.字符串函数2.数值函数3.日期函数4.流程函数三、约束 1.概述2.约束演示3.外键约束四、多表查询 1.多表关系2.多表查询表述3.内连接4.外连接5.自连接6.子查询五、事务 1.事务简介2.事务操作3.事务四大特性4.并发事务问题5.事务隔离级…

C语言——求阶乘的两种方法

第一种方法使用了递归思想 #include <stdio.h> int fun(int N) {if (N 0){return 1;}else{return (fun(N - 1) * N);} } int main() {int N 0;scanf_s("%d", &N);printf("%d",fun(N)); } 第二种方法用的for循环 #include <stdio.h> i…

如何开启idea中的断言功能?

目录 一、什么是断言&#xff1f; 二、Java断言的语法 三、开启断言 一、什么是断言&#xff1f; 断言&#xff08;assert&#xff09;是 Java 中的一条语句&#xff0c;一种在程序中的逻辑&#xff08;如一个结果为真或假的逻辑判断式&#xff09;&#xff0c;目的是验证软…

Unity Shader unity文档学习笔记(十八):unity雾效原理

看很多文章用近平面远平面组成矩阵后转到裁剪空间下通过Z值来解&#xff0c;实际更简单的方式可以直接通过判断距离来实现 FogMgr控制远近面 public class TestFog : MonoBehaviour {public int startDis 0;public int endDis 50;public Vector4 fogParam;public void Awak…