学长告诉我,大厂MySQL都是通过SSH连接的

2023-11-15

大家好,我是咔咔 不期速成,日拱一卒

一、背景

之前待的几个公司,数据库、服务器权限都是给所有后端直接拉满的,但也会出现员工离职的情况,每次有人离职时都需要改数据库密码、服务器密码。

每次密码修改后得告知所有开发修改本地密码,但这样的事情也不是经常发生,公司虽小但很稳定。

假设你所待的公司是一个开发非常多的公司,有可能你待了一年还没认识全,人员流动的速度也非常快,这时上面那种方案的执行成本就非常高了。

若此时把这个问题抛给你,让你解决你会有什么方案?

接下来给大家介绍两种方案,一种传统方案另一种是通过SSH来实现的。

二、传统方案

MySQL版本:8.0.26

其中最简单的方案就是给每个人在数据库添加一个账号,具体步骤如下:

创建新用户

create user "kaka"@"%" identified by 'qwerty123456';

其中kaka为自定义的用户名;%为登录域名,host为’%'时表示为 任意IP,为localhost时表示本机,或者填写指定的IP地址;qwerty123456为密码

为用户授权

grant all privileges on kaka.* to "kaka"@"%" with grant option;

或

grant all on *.* to "kaka"@"%";

其中kaka.*,kaka为数据名,*为所有表,如果想授权全部表就把kaka.*写成*.*,当然这里是以开发库为基础的,所有的权限都得给。当前也可以给予部分权限。

刷新权限

flush privileges;

使用用户名:kaka进行登录

发现kaka用户只有两个库,kaka库就是授权的库,当切换系统库时发现是没有权限的。

在切到kaka库,是可以做正常的curd操作的

给予部分权限

grant update on kaka.* to "kaka"@"%";

flush privileges;

若想给多个权限,则逗号隔开即可,update,select,insert …,执行完切记需要刷新权限,否则不会生效

撤销全部权限

这块有点小插曲,当执行撤销命令后报了这样一个错

Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation

查阅了一下官方文档,原因是由于root用户没有SYSTEM_USER权限,把权限加入后即可解决

grant system_user on *.* to 'root';
revoke all privileges ,grant option from kaka;

或

revoke all privileges on kaka.* from kaka;

flush privileges;

插销部分权限

revoke select on kaka.* from kaka;

kaka.*为表名,kaka为用户名

员工离职删除用户即可

drop from kaka;

kaka 为用户名

嗯,成功的把MySQL权限给复习了一遍…

三、通过SSH隧道连接MySQL数据库

准备工作

主机名 角色 IP 端口
kaka1 MySQL主机 47.93.12.204 3306
kaka2 远程服务器 8.142.40.202 33888

修改MySQL主机仅允许远程服务器连接

use mysql;

update user set host='8.142.40.202' where user = "root";

此时在MySQL主机服务器是直接登录不了的

配置SSH连接MySQL主机

在远程主机执行

ssh -fN -L33888:47.93.12.204:3306 root@8.142.40.202

在使用SSH连接使用时发现部分人员说是连接一直在断,影响了正常开发,只需要加上下面这个参数重新执行即可,这个参数是每60秒发送一个KeepAlive请求,保证终端不会因为超时空闲而断开连接

ssh -o ServerAliveInterval=60 -fN -L33888:47.93.12.204:3306 root@8.142.40.202

注意前边是远程服务器 后边是远程主机的服务器账号、服务器地址

命令执行完成后,可以通过命令

mysql -h 127.0.0.1 -P 33888 -uroot -p

密码是MySQL服务器的 MySQL密码

四、本地开发连接

上述通过两台服务器给大家做了演示,接下来看看开发人员如何连接开发数据库

同样在本地也执行命令

ssh -fN -L3306:47.93.12.204:3306 root@8.142.40.202

在host配置文件中进行域名映射

// 127.0.0.1 MySQL服务器地址
127.0.0.1 8.142.40.202

使用Navicat进行连接

可以看到已经连接上了

这样就强制让所有开发人员通过SSH来连接MySQL,当有一个开发离职后,只需要删除对应的服务器账号即可

五、限制Linux用户登录

你肯定也想到了,通过SSH连接使用的服务器账号密码,那么就意味着所有开发者都可以用过自己的账号密码进行登录服务器。

上有政策,下有对策,接下来看看如何限制用户登录服务器。

例如现在添加了用户niuniu,此时该用户是肯定可以连接到服务器的

可以看到当前用户通过Xsheel连接上了服务器,服务器权限还是给部分人开通比较好,接下来就来限制该用户登录服务器

执行命令

usermod -s /sbin/nologin niuniu 

用户niuniu通过Xsheel登录服务器,可以看到返回当前账号不可用,说明我们想要的结果已经有了

在这里插入图片描述
再看看本地Navicat连接是否正常


截止到这里就已经完成了所有的安全措施。

六、扩展一:WITH GRANT OPTION

这个参数是可选的,如果不加,那这句话到这就结束了,这个用户就是一级,他不能再去建子用户了,如果给了,就代表可以建子账号,当然子用户能分出去的权限仅限他自己有的权限

注意一点,这里的操作只能分配给已有的账户,创建新账户需要另外的权限
并且,还得有GRANT权限,不然的话就算有这个权限但是没有执行这个权限的权限

七、扩展二:Linux用户操作

添加用户

useradd {username}

删除用户

vipw

进去之后删除对应的用户名即可

groupdel {username}

rm -rf /home/{username}

设置密码

passwd {username}

需要输入两遍,注意

八、总结

本文给大家介绍两种应对开发者离职后,数据库权限收回的方案。一种是通过MySQL本身字段的权限、另一种是通过SSH来连接,目前咔咔所在的公司是通过SSH进行连接的。

在介绍这两种方案时发现了很多可以扩展的知识点,也一并写了出来,当你看这篇文章时就不用再一次进行查资料了。

坚持学习、坚持写作、坚持分享是咔咔从业以来所秉持的信念。愿文章在偌大的互联网上能给你带来一点帮助,我是咔咔,下期见。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学长告诉我,大厂MySQL都是通过SSH连接的 的相关文章

  • 如何将 MySQL 数据库更改为 UTC?

    我使用的是 Windows 7 对数据库方面的东西有点陌生 我尝试在 Google 上搜索如何将系统时区更改为 UTC 但文档有些高级 我不太确定如何更改此字段 在 my ini 文件的 mysqld 部分下 添加以下行 default t
  • ActiveRecord3死锁重试

    Rails 3 或 ActiveRecord 3 是否有任何插件可以复制旧版本死锁重试 http agilewebdevelopment com plugins deadlock retry插入 或者 该插件仍然适用于 Rails 3 吗
  • MySql 最后插入 ID,连接器 .net

    我正在使用 MySql Connector net 我需要获取最后一个查询生成的插入 id 现在 我假设返回值是MySqlHelper ExecuteNonQuery应该是最后一个插入id 但它只返回1 我正在使用的代码是 int inse
  • 使 pdo::query 静态

    当我运行下面的代码时出现此错误 我通常使用 msql 函数 但我尝试使用 PDO 代替 怎么了 致命错误 第 14 行无法静态调用非静态方法 PDO query
  • MYSQL - 查找最近的前一天

    我可以以某种方式 不使用 PHP 找到一周中最近的前一天日期吗 Like 最近的上一个星期二的日期是哪一天 CURDATE INTERVAL WEEKDAY CURDATE wday IF WEEKDAY CURDATE gt wday 0
  • mysql-如何向列申请补助?

    用户名 撤销对数据库的选择 Person I set GRANT SELECT id ON database Person TO username localhost 不是工作 gt SELECT secret FROM Person Go
  • Hibernate 对集合的查询过滤器

    我想执行以下查询 from Item i where i categoryItems catalogId catId 然而 这会产生以下异常 非法尝试取消引用集合 所以我用谷歌搜索 找到了这个 Hibernate 论坛帖子https for
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 第三个下拉菜单不从数据库填充

    我有以下 Index php
  • 将 RSA 与 Eclipse 远程系统资源管理器结合使用?

    我在 Windows 7 计算机上的 Eclipse 中使用远程系统资源管理器 RSE 插件 通过 SFTP 在远程 Linux 服务器上编辑文件 我在我的机器和 Linux 服务器之间设置了 RSA 密钥对 当我在 Cygwin 命令提示
  • 如何在Mysql中仅将不同的值从一个表复制到另一个表?

    我有一个大约 2 5GB 的 MySql 数据库 表 A 具有以下列 anoid query date item rank url 我刚刚创建了另一个仅包含列的表 b query and date 我想在查询列中插入所有不同的记录 及其各自
  • 如何使用 vitess 仅对特定表进行分片

    我创建了一个包含三个表的未分片键空间 现在我想对前两个表的键空间进行分片 但不想对第三个表进行分片 如何才能做到这一点 Vitess 文档不包含任何与此相关的信息或示例 请帮忙 Thanks vitess 中的垂直分片与水平分片类似 您应该
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 同一配置文件上的两个不同提供程序

    我在用着实体框架 6 1 0 I have 2 家提供者 MysqlClient 和 SQLServerCE 我需要创建2个不同的DBContext 这迫使我创造2个配置类因为mysql有一些不同的东西 但是当我初始化应用程序时 Datab
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希

随机推荐

  • SoapUI、Jmeter、Postman三种接口测试工具的比较分析——灰蓝

    前段时间忙于接口测试 也看了几款接口测试工具 简单从几个角度做了个比较 拿出来与诸位分享一下吧 各位如果要转载 请一定注明来源 最好在评论中告知博主一声 感谢 本报告从多个方面对接口测试的三款常用工具进行比较分析 以便于在特定的情况下选择最
  • STL基本容器及算法

    STL 1 STL 常用容器 1 string 1 1基本概念 本质 string和C 风格的字符串 而string本质上是一个类 string和char 区别 char 是一个指针 string是一个类i 类内部封装了char 管理这个字
  • windows203+sql server 2000无法打开1433端口

    windows203 sql server 2000无法打开1433端口 1 如果你是win2003 那么一定要安装sql的补丁sp4 检查你的SQL有没有打补丁 没有的话要打上补丁 检查的方法是在查询分析器中运行 select versi
  • 如何构建多域名HTTPS代理服务器转发

    在当今互联网时代 安全可靠的网络访问是至关重要的 本文将介绍如何使用SNI Routing技术来构建多域名HTTPS代理服务器转发 轻松实现多域名的安全访问和数据传输 SNI代表 Server Name Indication 是TLS协议的
  • 接口测试 —— Requests库介绍

    1 Requests库 Requests库是用Python语言编写 基于urllib3模块 采用Apache2 Licensed开源协议的 HTTP 库 虽然Python的标准库中urllib3模块已经包含了平常我们使用的大多数功能 但是它
  • 2010.03.09(2)——Hibernate注解 无主键表

    2010 03 09 2 Hibernate注解 无主键表 今天写了个jfreechar从后台传数据的例子 就随便编了两个表 懒的写主键了 我用的是springmvc hibernate的方式 由于没有主键 我的注解如下 Entity Ta
  • 完整的 CentOS 系统服务器初始化配置、系统安全加固、系统内核参数优化以及常用软件安装脚本分享...

    描述 适用于企业内部 CentOS7 系列服务器初始化 系统安全加固脚本 内容包含了 网络初始化设置 软件更新源替换以及内核升级实践 时间时区初始化设置 系统安全加固 等保三级操作系统主机检查项 安全运维设置 系统内核参数 常用软件安装等
  • Vue技术_props配置(提高了组件的复用性)

    一 props简介 在Vue中 props属性是用于组件之间传递数据的一种机制 通过在子组件中定义props属性 可以接收父组件传递的数据 并在子组件中使用这些数据 下面是props属性的一些详细说明 1 定义和传递props 在子组件中使
  • 2.CMake的入门准备

    在计算机上获取以及安装CMake 在使用 CMake 之前 您需要在系统上安装或构建 CMake 二进制文件 在许多系统上 您可能会发现 CMake 已经安装或可以使用系统的标准包管理器工具进行安装 Cygwin Debian FreeBS
  • 【OpenCV • c++】直方图计算

    文章目录 一 什么是直方图 二 直方图的相关函数 1 计算直方图 calcHist 2 找寻最值 minMaxLoc 三 程序演示 1 色调 饱和度直方图 2 一维直方图 3 RGB 三色直方图 一 什么是直方图 直方图广泛应用于很多计算机
  • weex vue 动态添加图标字体

    研究半天才明白 其实就是unicode字符串解码成文字就可以了 就这么简单 简单
  • 送书|逆向系列-你一定要懂的MD5加密

    逆向的步骤 逆向的步骤主要包含以下几点 抓包 抓包的过程其实很简单 在学爬虫入门的时候 想必这是每一个同学都必学的一个阶段 打开开发者调试工具 刷新页面 即可在network面板查看到加载出来的数据包 调试 当找到目标数据包时 根据目标数据
  • 【100%通过率 】【华为OD机试真题c++】递增字符串【 2023 Q1A卷

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 问题描述 定义字符串完全由 A 和 B 组成 当然也可以全是 A 或全是 B 如果字符串从前往后都是以字典序排列的 那么我们称之为严格递增字符串 给出一个
  • TypeError: expected Tensor as element 0 in argument 0, but got numpy.ndarray

    显而易见 是pytorch中的Tensor和numpy ndarry类型导致的问题 只需要进行array和tensor的转换就行 调用函数torch from numpy annotation 实现array转换tensor
  • 萤石智能猫眼质保

    总流程 1 官网 https www ys7 com loginRedirect 1 2 登录 3 进入售后界面 4 填写申请单 5 寄送 根据短信
  • 程序员面试大厂被拆台:干这么多年不懂设计模式谁会要

    正在敲代码的你 春节假期即将来临 复盘这1年 你印象最深刻的一件事是什么 有人在群里回答了一条扎心的答案 忙碌1年 每天996 回首2019除了加班再无成长可说 你以为只要把事情搞定了 成长是一件自然而然的事情 但是过段时间你发现之前犯过的
  • Java生成doc文档一(概念简介)

    在很多项目的实际工作中 后端可能需要将一些整合的数据输出成word pdf excel等形式的文档 最近我在项目也遇到这样的而需求 这里就记录下来是如何一步一步完成java后端生成doc文档的 由于现在word文档基本都是用到07以上 所以
  • 协程中的流

    协程中的异步流 基础 一 什么是异步流 可以连续返回多个值 与集合的区别 集合可以返回多个计算好的值 但是只能一次性返回 与Rxjava 的流是同一个概念 二 如何创建异步流 1 最基础的流构建器 flow flow 构建块中的代码可以挂起
  • Windows上发生异常时抓取dump

    文章目录 正文 RaiseException函数 捕获大部分崩溃 SetUnhandledExceptionFilter 那还有小部分呢 为什么调试器可以抓到所有崩溃 CRT C STL 系统API之间的关系 CRT中几个重要的函数 退出进
  • 学长告诉我,大厂MySQL都是通过SSH连接的

    大家好 我是咔咔 不期速成 日拱一卒 一 背景 之前待的几个公司 数据库 服务器权限都是给所有后端直接拉满的 但也会出现员工离职的情况 每次有人离职时都需要改数据库密码 服务器密码 每次密码修改后得告知所有开发修改本地密码 但这样的事情也不