学长告诉我,大厂MySQL都是通过SSH连接的
大家好,我是咔咔 不期速成,日拱一卒
一、背景
之前待的几个公司,数据库、服务器权限都是给所有后端直接拉满的,但也会出现员工离职的情况,每次有人离职时都需要改数据库密码、服务器密码。
每次密码修改后得告知所有开发修改本地密码,但这样的事情也不是经常发生,公司虽小但很稳定。
假设你所待的公司是一个开发非常多的公司,有可能你待了一年还没认识全,人员流动的速度也非常快,这时上面那种方案的执行成本就非常高了。
若此时把这个问题抛给你,让你解决你会有什么方案?
接下来给大家介绍两种方案,一种传统方案另一种是通过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进行连接的。
在介绍这两种方案时发现了很多可以扩展的知识点,也一并写了出来,当你看这篇文章时就不用再一次进行查资料了。
“
坚持学习、坚持写作、坚持分享是咔咔从业以来所秉持的信念。愿文章在偌大的互联网上能给你带来一点帮助,我是咔咔,下期见。
”
学长告诉我,大厂MySQL都是通过SSH连接的的更多相关文章
- 告诉你一个真实的OpenStack:都谁在用,用来干什么?
告诉你一个真实的OpenStack:都谁在用,用来干什么? OpenStack基金会近日发布的双年调查报告显示,开源云计算软件OpenStack正在进入主流企业市场,但该项目依然面临较难部署和管理的老 ...
- 【转】mysql数据库中实现内连接、左连接、右连接
[转]mysql数据库中实现内连接.左连接.右连接 内连接:把两个表中数据对应的数据查出来 外连接:以某个表为基础把对应数据查出来 首先创建数据库中的表,数据库代码如下: /* Navicat MyS ...
- [修]开启MySQL远程访问权限 允许远程连接
原文地址:http://www.cnblogs.com/XL-Liang/archive/2012/05/03/2481310.html 这个地址也许更有帮助:http://www.cppblog.c ...
- Jmeter配置通过SSH连接的mysql数据库
jmeter连接配置mysql数据库时,如果数据库服务器没有通过ssh连接,则只需要添加配置相应的jdbc参数就可以了.如果数据库服务器是通过SSH连接的,则需要通过中间远程连接工具来登录,此处使用的 ...
- 【small项目】MySQL第二天早上第一次连接超时报错,解决方法com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
MySQL第二天早上第一次连接超时报错,解决方法com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link ...
- 在docker中创建使用MySQL,并实现远程连接navicat
在 docker 中使用 mysql 安装完docker之后,在命令行中输入docker images可以查看自己创建的image(安装下载docker的教程很多了,大家需要可以去查一下就可以了)这里 ...
- MySQL中concat函数(连接字符串)
MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...
- mysql数据库在Navicat Premium连接的时候出现1862错误
navicat连接打开时报1862的错误, 很就没有连接mysql看看了,今天连接的时候发现本机的mysql链接不上了,在cmd中执行动作的时候也会叫你去set password,做设置密码的动作时会 ...
- 开启MySQL远程访问权限 允许远程连接
1.登陆mysql数据库 mysql -u root -p 查看user表 mysql> use mysql;Database changedmysql> select host,user ...
随机推荐
- 2020级cpp上机考试题解#B卷
A卷的第七题我只会一个个排除的方法 意思就是暂时没有好办法所以A卷不搞了 1:递归函数求数列 题意: 有一个递归函数int f(int m),计算结果代表了数列的第m项.当m等于1时,函数结果返回1: ...
- 用C语言实现井字棋(人人/AI人机)--完结版
目录 用C语言实现井字棋(人人/AI人机)--完结版 BUG与优化3: 1. 修改了step的计算方法,每个玩家玩完就加一次step 2. 改变了电脑下棋的逻辑,每个玩家玩完之后都跳过这次循环 源码: ...
- Nastran的应变方向
问题 近日使用Nastran做一个算例,在计算频响时发现:位移场是连续的,而应变场不连续.以某一频率处应变场为例,其上表面X.Y方向应变场分布如下图.此处关闭了云图的插值,所显示的为单元的应变,因此云 ...
- c++ 乘法逆元
主要参考:OI-WIKI 为什么要逆元 当一个题目让你求方案数时常要取余,虽然 \((a+b)\% p=(a\% p+b\% p)\%p\) \((a-b)\% p=(a\% p-b\% p)\%p\ ...
- CPPRESTSDK 编译
首先要 git clone这个库git clone git://github.com/Microsoft/cpprestsdk.git然后git 一下 Vcpkg.\vcpkg\bootstrap-v ...
- C#中的String Interpolation
本文迁移自Panda666原博客,原发布时间:2021年4月17日. 在英文中,$符号表示美元符号(United States dollar).这也是很多人喜欢的东西.甚至是一生最求的东西.但在编程语 ...
- 从零开始实现lmax-Disruptor队列(三)多线程消费者WorkerPool原理解析
MyDisruptor V3版本介绍 在v2版本的MyDisruptor实现多消费者.消费者组间依赖功能后.按照计划,v3版本的MyDisruptor需要支持多线程消费者的功能. 由于该文属于系列博客 ...
- BUUCTF-一叶障目
一叶障目 010editor打开没发现有什么异常,看分辨率尺寸觉得不对劲,修改了一下发现了flag 图片第二组前面四个是宽后面是高,修改第七位为05即可发现flag flag{66666}
- Vue 安装 vue的基本使用 vue的初步使用步骤
1. 资源: https://cn.vuejs.org/v2/guide/#%E8%B5%B7%E6%AD%A5 进入官网学习 2. 点击安装,要把vue下载到本地文件的根目录中,不要选择压缩版的,这 ...
- django生成迁移文件和执行迁移的命令
生成迁移文件: python manage.py makemigrations #创建数据库迁移文件 执行迁移: python manage.py migrate # 根据数据库迁移文件生 ...