学长告诉我,大厂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 ...
随机推荐
- 142_Power BI之同比预测
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 最近刚好在做一个简单同比预测的模型,预测方法很简单,就是累计同比预测,把MTD展示出来. [video widt ...
- [漏洞复现] [Vulhub靶机] Struts2-045 Remote Code Execution Vulnerablity(CVE-2017-5638)
免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责. 0x00 背景知识 Apache Struts 2是美国Apache软件基金会的一个开源项目,是一套用于创建企业级Java W ...
- There appears to be trouble with your network connection. Retrying…
yarn 错误There appears to be trouble with your network connection. Retrying- 原因:yarn超时 解决途径: #查看代理 yar ...
- jq命令用法总结
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 如果说要给Linux文本三剑客(grep.sed.awk)添加一员的话,我觉得应该是jq命令,因为jq命令是用来处 ...
- 2021年第十二届蓝桥杯javaA组省赛部分题目
试题 D: 路径 本题总分:10 分 [问题描述] 小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图 中的最短路径. 小蓝的图由 2021 个结点组成,依次编号 1 至 2021. 对 ...
- springcloud 断路器
https://www.jb51.net/article/138572.htm 参考资料: http://www.cnblogs.com/ulysses-you/p/7281662.html http ...
- JAVA - 启动线程有哪几种方式
JAVA - 启动线程有哪几种方式 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行 ...
- python基础学习8
python基础学习8 内容概要 字典的内置方法 元组的内置方法 集合的内置方法 垃圾回收机制 内容详情 字典的内置方法 一.类型转换 res = dict(name='jason', pwd=123 ...
- go-zero微服务实战系列(三、API定义和表结构设计)
前两篇文章分别介绍了本系列文章的背景以及根据业务职能对商城系统做了服务的拆分,其中每个服务又可分为如下三类: api服务 - BFF层,对外提供HTTP接口 rpc服务 - 内部依赖的微服务,实现单一 ...
- UiPath选择器之页面选择器的介绍和使用
一.页面选择器的介绍 某些软件程序的布局和属性节点具有易变的值,例如某些Web应用程序.UiPath Studio无法预测这些变化,因此,您可能必须手动生成一些选择器. 每个属性都有一个分配的值.选择 ...