MySQL:保护数据库

保护数据库

  • 1. 用户
    • 1.1 创建用户
    • 1.2 查看用户
    • 1.3 删除用户
    • 1.4 修改密码
  • 2. 权限
    • 2.1 授予权限
    • 2.2 查看权限
    • 2.3 撤销权限

之前都是介绍本地数据库而你自己就是数据库的唯一用户,所以不必考虑安全问题。但实际业务中数据库大多放在服务器里,你必须妥善处理好用户账户和权限的问题,合理决定谁拥有什么程度的权限以防止对数据的破坏和误用。因此应该知道如何增强数据库的安全性。

1. 用户

1.1 创建用户

目前为止我们一直使用的是 root 用户帐户,这是在安装 MySQL 时就设置的根账户。
在生产环境中我们需要创建新用户并合理分配权限。
例如,你有一个应用程序及其相关联的数据库,你要让使用你应用程序的用户拥有读写数据的权限,但他们不应该有改变数据库结构的权限,如创建和删除一张表,否则会出大问题。又如,你新招了一个DBA(数据库管理员),你需要给他新建一个账户,让他可以访问一个或多个数据库乃至整个MySQL服务器。

  • 创建用户
    设置一个新用户,用户名为 john,可以选择用 @ 来限制他可以从哪些地方访问数据库(可以是主机名、IP地址、域名)
CREATE USER john;
-- 无限制,可以从任何位置访问
CREATE USER john@127.0.0.1;
-- 限制IP地址,可以是特点电脑,也可以是特定网络服务器web server
CREATE USER john@localhost;
-- 限制主机名,特定电脑
CREATE USER john@'codewithmosh.com';
-- 限制域名(不加试验也可以),可以是该域名内的任何电脑,但子域名则不行
CREATE USER john@'%.codewithmosh.com';
-- 加上了通配符,可以是该域名及其子域名下的任何电脑-- 可以用IDENTIFIED BY来设置密码
CREATE USER john IDENTIFIED BY '1234';
-- 可以从任何地方访问,设置密码为1234

1.2 查看用户

  • 方法1:采用代码
    在自动创建的名为mysql的数据库中(隐藏),有个user表记录了账户信息,查询即可:
SELECT * FROM mysql.user

在这里插入图片描述
除了john和root帐户,还有几个MySQL内部自动建立和使用的帐户(用户名均为 mysql.*)。
Host 字段表示用户可以从哪里访问数据库,john 是一个通配符 %,表示他可以从任意位置访问数据库,其它几个用户都是 localhost,表示都只能从本电脑访问数据库,不能从远程连接访。

  • 方法2:直接从左侧导航栏中的Administration标签页里的Users and Privileges, 同样可以查看服务器上的用户列表和信息。

1.3 删除用户

NOTE:记得总是即使删除掉组织中那些不用的账户。

DROP USER john@codewithmosh.com
-- 删除用户名

1.4 修改密码

  • 方法1:用SET语句
SET PASSWORD FOR john = '1234';
-- 修改john的密码
SET PASSWORD = '1234';
-- 修改当前登录账户的密码
  • 方法2:直接从左侧导航栏中的Administration标签页里的Users and Privileges,点击用户john,可修改其密码,最后Apply。或者点击’Expire Password’强制其密码过期,下次用户登录必须修改密码。

2. 权限

2.1 授予权限

数据库存在于主机中,可以创建不同的连接来操作数据库。不同的连接对应不同的用户,每个用户具有不同的权限。
在这里插入图片描述

  • 用户创建和权限授予过程(这个过程可以在管理员连接中完成),对于网页或桌面应用程序的使用用户,给予其读写数据的权限,但禁止其增删表或修改表结构。
  1. 创建用户
    例如,我们有个叫作moon的应用程序,我们给这个应用程序建个用户帐户名为moon_app(app指明这代表的是整个应用程序而非一个人)。
CREATE USER moon_app IDENTIFIED BY '1234';
  1. 授予用户权限
    给予其对sql_store数据库增删查改以及执行储存过程(EXECUTE)的权限,这是给终端用户常用的权限配置。
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE
-- GRANT子句表名授予那些权限,ALL代表所有权限
ON sql_store.*
-- ON子句表明可访问那些数据库和表
-- sql_store.*表示可以访问sql_store下所有表
-- *.*表示可以访问所有数据库的所有表
TO moon_app;
-- 表示授予那些用户
  1. 建立新连接
    在这里插入图片描述
    该新连接的用户名和密码采用创建的用户名和密码。
  2. 测试用户数据库
USE sql_store;
SELECT *
FROM customers;
-- 正常使用
USE sql_invoicing;
-- 用sql_invoicing会报错

在这里插入图片描述

Note:可以搜索 MySQL privileges,第一个结果就是官方文档里罗列的所有可用的权限及含义,其中的ALL是最高权限,通常我们给予管理员ALL权限。

2.2 查看权限

两种方法:SQL语句和导航菜单。

  • 方法1:
SHOW GRANTS;
-- 查看当前登录账户的权限
SHOW GRANTS FOR john;
-- 查看john账户的权限

可以看到,当前 root 帐户拥有最高权限,除了ALL的所有权限,还有另外一个叫 PROXY 的权限。感觉root帐户和john这样的DBA帐户的区别就跟群主和群管理员的区别一样。

  • 方法2:通过导航栏Administration标签页里的Users and Privileges来查看各用户的权限。

在这里插入图片描述

2.3 撤销权限

GRANT CREATE VIEW
ON sql_store.*
TO moon_app;
-- 授予权限
REVOKE CREATE VIEW
ON sql_store.*
FROM moon_app;
-- 撤销权限

不要给予一个账户过多权限,总是给予他所必须的最小权限,不然就在系统中创造了太多的安全漏洞。

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

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

相关文章

C语言实现 人生重生模拟器游戏

目录 实现一个简化版的人生重开模拟器 1.菜单函数 2.game函数 3.幼年时期(even函数) 4.壮年时期(Juvenile函数) 课余时间实现的小游戏 实现一个简化版的人生重开模拟器 1.菜单函数 void menu() {printf("---------------…

版本控制系统:Git 纯应用(持续更新);

基本操作 ctrl上行键:上次代码 本地仓库:Git init 新建文件:touch xxxx.xxx 查看状态:Git status 文件从工作区——暂存区:Git add ./文件名(.是通配符代表所有) 暂存区——仓库:Git commit -m &…

Eureka与Docker的完美融合:容器化部署全攻略

Eureka与Docker的完美融合:容器化部署全攻略 在微服务架构中,服务发现是实现服务间通信的关键。Eureka作为Netflix开源的服务发现框架,与Docker容器化技术的结合,为构建灵活、可扩展的微服务应用提供了强大支持。然而&#xff0c…

代码随想录第四十六天 | 322. 零钱兑换,279.完全平方数,139.单词拆分

322. 零钱兑换 看完想法:此处是求最小值,所以递推公式中含Min,即dp[j] min(d[[j], dp[j - coins[i]] 1),初始化都为INT_MAX,且dp[0] 0。由于不是求组合数,所以物品和背包重量的遍历先后顺序都是可以的…

论文阅读之旋转目标检测ARC:《Adaptive Rotated Convolution for Rotated Object Detection》

论文link:link code:code ARC是一个改进的backbone,相比于ResNet,最后的几层有一些改变。 Introduction ARC自适应地旋转以调整每个输入的条件参数,其中旋转角度由路由函数以数据相关的方式预测。此外,还采…

使用 Ollama 时遇到的问题

题意: ImportError: cannot import name Ollama from llama_index.llms (unknown location) - installing dependencies does not solve the problem Python 无法从 llama_index.llms 模块中导入名为 Ollama 的类或函数 问题背景: I want to learn LL…

【postgreessql 】统计库中的所有表数量

在PostgreSQL中,你可以使用SQL查询来统计数据库中的所有表数量。这通常涉及到查询系统目录表,特别是 pg_catalog.pg_tables 表,它存储了关于数据库中所有表的信息。 SELECT COUNT(*) FROM information_schema.tables WHERE table_schema IN …

第二十五章 迭代器(Iterator)(Python)

文章目录 前言一、什么是迭代器?二、如何生成迭代器? 前言 迭代器是为了给迭代对象进行迭代使用的,是访问集合元素的一种方式。从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 列表、集合、元…

mysql逗号分割字符串“1,2,3”实现in查询

数据示例 前台单值参数实现in查询 主要函数FIND_IN_SET 该函数的作用是查询字段(strlist) 中是否包含(str)的结果,返回结果为 null或记录 select id,recommend_position_id from t_stk_task where FIND_IN_SET(359919,recommend_position_id)查询效果 前台集…

小麦TaHRC信息汇总

文献中关于TaHRC的信息总结 主要发现: TaHRC基因的功能和定位: TaHRC基因编码一个富含组氨酸的钙结合蛋白,定位于核内。TaHRC-S(敏感等位基因)的高表达与小麦穗腐病(FHB)的敏感性相关 。通过RNA干扰和CRISPR-Cas9基因…

【软件测试】性能测试 | 概念 | 常见术语 | 性能指标 | 分类 | 流程

性能测试 文章目录 性能测试一、什么是性能测试1.生活中遇到的软件的性能问题2.性能测试定义3.性能测试和功能测试有什么区别4.什么样的表现属于软件性能好、什么样的表现不好5.影响一个软件性能因素有哪些 二、为什么进行性能测试三、性能测试的常见术语以及性能测试的衡量指标…

C++部分复习笔记下

7. C11 范围for 使用格式 vector<int> v { 1,2,3,4,5 }; for (auto e : v) {cout << e << " "; } cout << endl;底层原理&#xff0c;使用迭代器 vector<int> v { 1,2,3,4,5 }; auto it v.begin(); while (it ! v.end()) {cout…

如何在TechNow招聘顶尖AI工程师

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Vue3中h函数

Vue3认识h函数 Vue推荐在绝大数情况下使用模板来创建你的HTML&#xff0c;然后一些特殊的场景&#xff0c;你真的需要JavaScript的完全编程的能力&#xff0c;这个时 候你可以使用 渲染函数 &#xff0c;它比模板更接近编译器&#xff1b; 前面我们讲解过VNode和VDOM的概念&a…

PolyGen: An Autoregressive Generative Model of 3D Meshes代码polygen_decoder.py解读

论文&#xff1a;PolyGen: An Autoregressive Generative Model of 3D Meshes 首先阅读transformer铺垫知识《Torch中Transformer的中文注释》。 以下为Encoder部分&#xff0c;很简单&#xff0c;小学生都会&#xff1a; from typing import Dict, Optional, Tuple import …

设计模式学习-《策略模式》

策略模式 问题描述&#xff1a; 有各种鸭子(北京鸭、玩具鸭)&#xff0c;鸭子有各种行为(叫、飞)希望能够实现不同的鸭子&#xff0c;显示不同鸭子的信息 传统方法会创建一个抽象类 public abstract class Duck{public Duck(){}public abstract void display();//显示鸭子信…

Spring Boot 高级配置:如何轻松定义和读取自定义配置

目录 1. 环境准备 2. 读取配置数据 2.1 使用 Value注解 2.2 Environment对象 2.3.2.3 自定义对象 这篇博客我们将深入探讨如何在Spring Boot应用中有效地定义和读取自定义配置。掌握这一技巧对于任何希望优化和维护其应用配置的开发者来说都是至关重要的。我们将从基础开始…

企业消费采购成本和员工体验如何实现“鱼和熊掌“的兼得?

有企业说企业消费采购成本和员工体验的关系好比是“鱼和熊掌”&#xff0c;无法兼得&#xff1f; 要想控制好成本就一定要加强管控&#xff0c;但是加强管控以后&#xff0c;就会很难让员工获得满意的体验度。如果不加以管控&#xff0c;员工自由度增加了&#xff0c;往往就很难…

动态住宅代理IP的3个优点

在大数据时代的背景下&#xff0c;代理IP成为了很多企业顺利开展的重要工具。代理IP地址可以分为住宅代理IP地址和数据中心代理IP地址。选择住宅代理IP的好处是可以实现真正的高匿名性&#xff0c;而使用数据中心代理IP可能会暴露自己使用代理的情况。 住宅代理IP是指互联网服务…

Jenkins教程-13-参数化任务构建

上一小节我们学习了发送html邮件测试报告的方法&#xff0c;本小节我们讲解一下Jenkins参数化任务构建的方法。 很多时候我们需要根据不同的条件去执行构建&#xff0c;如自动化测试中执行test、stg、prod环境的构建&#xff0c;Jenkins是支持参数化构建的。 以下是Jenkins官…