当前位置:网站首页>学长告诉我,大厂MySQL都是通过SSH连接的
学长告诉我,大厂MySQL都是通过SSH连接的
2022-08-09 16:32:00 【Trouvailless】
一、背景
之前待的几个公司,数据库、服务器权限都是给所有后端直接拉满的,但也会出现员工离职的情况,每次有人离职时都需要改数据库密码、服务器密码。
每次密码修改后得告知所有开发修改本地密码,但这样的事情也不是经常发生,公司虽小但很稳定。
假设你所待的公司是一个开发非常多的公司,有可能你待了一年还没认识全,人员流动的速度也非常快,这时上面那种方案的执行成本就非常高了。
若此时把这个问题抛给你,让你解决你会有什么方案?
接下来给大家介绍两种方案,一种传统方案另一种是通过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 [email protected]
复制代码在使用SSH连接使用时发现部分人员说是连接一直在断,影响了正常开发,只需要加上下面这个参数重新执行即可,这个参数是每60秒发送一个KeepAlive请求,保证终端不会因为超时空闲而断开连接
ssh -o ServerAliveInterval=60 -fN -L33888:47.93.12.204:3306 [email protected]
复制代码注意前边是远程服务器 后边是远程主机的服务器账号、服务器地址
命令执行完成后,可以通过命令
mysql -h 127.0.0.1 -P 33888 -uroot -p
复制代码密码是MySQL服务器的 MySQL密码

四、本地开发连接
上述通过两台服务器给大家做了演示,接下来看看开发人员如何连接开发数据库
同样在本地也执行命令
ssh -fN -L3306:47.93.12.204:3306 [email protected]
复制代码在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进行连接的。
在介绍这两种方案时发现了很多可以扩展的知识点,也一并写了出来,当你看这篇文章时就不用再一次进行查资料了。
边栏推荐
- 浅谈如何保证Mysql主从一致
- Insert a number and sort "Suggested Favorites"
- 期货开户交易所的手续费和查询方法
- B43 - 基于STM32单片机的自动视力检测仪
- 自动生成设备节点
- How to adjust futures account opening process and handling fee
- Account opening requirements and exemptions for special futures such as crude oil
- .NET 6 study notes (4) - Solve the Nullable warning in VS2022
- Optimization of a piece of JDBC code (Part 1)
- LeetCode 131.分割回文串
猜你喜欢

【机器学习】回归树生成过程及举例理解

为了高性能、超大规模的模型训练,这个组合“出道”了

kafka 通过 jdbc 从oracle抓取数据

B44 - 基于stm32蓝牙智能语音识别分类播报垃圾桶

Jenkins使用pipeline部署服务到远程服务器

.NET MAUI 跨平台应用开发 I|.NET MAUI 跨平台基础

快捷键修改typora字体----自制脚本

Redis 定长队列的探索和实践

HR获取入职日期 RP_GET_HIRE_DATE

1.1、VIFB: A Visible and Infrared Image Fusion Benchmark(一个可见光与红外图像融合Benchmark)文章阅读
随机推荐
The article details of the qiucode.cn website realize the code block can be copied by clicking the button
【解决】虚拟机VMware通过局域网连接机器人no route to host
CocosCreator accesses WeChat mini-games
crm系统哪家好?好用的crm管理系统推荐
A51 - 基于STM32的DHT11和LCD显示串口通信仿真
WeChat developer tools error, prompt did not find the entrance to the app. The json file
Using Prometheus skillfully to extend the kubernetes scheduler
HR获取入职日期 RP_GET_HIRE_DATE
单片机的优点和单片机开发的流程
智能工具管理系统
ceph2
dotnet 6 为什么网络请求不跟随系统网络代理变化而动态切换代理
云服务的分类和应用
MASA Stack 第三期社区例会
基于ABP和Magicodes实现Excel导出操作
字节也开始缩招了...
什么是控制板定制开发?
不安装运行时运行 .NET 程序
2.1, pay attention to the network based on parallel context scenario text image super-resolution
[ Kitex 源码解读 ] 请求重试