远程访问mysql数据库的正确打开方式

为了安全,mysql数据库默认只能本机登录,但是在有些时候,我们会有远程登录mysql数据库的需求,这时候应该怎么办呢?

远程访问mysql数据,需要两个条件:

首先需要mysql服务器将服务绑定到0.0.0.0ip地址,这样才能允许远程机器登录,否则从网络层面就是不允许远程访问的。

其次需要在数据库里放开登录用户的远程访问权限,一般放开访问者的单个源ip地址,也可以全放开。当然全放开不如只放开单个ip安全。

下面是具体操作实例,为mysql添加远程访问权限:

1 mysql服务器打开远程访问权限

根据不同的版本,修改mysql.conf 或my.cnfmy.ini等文件,比如针对Ubuntu22.04版本,具体为在/etc/mysql/mysql.conf.d/mysqld.conf文件中,修改

复制代码
# bind-address          = 127.0.0.1
bind-address            = 0.0.0.0

将绑定ip从127.0.0.1修改成0.0.0.0,即可放开服务器远程访问权限。

2 登录的用户给它远程访问ip权限

具体为创建跟访问源ip绑定的用户,然后赋予它访问某个数据库(如auth库)的权限。:

复制代码
CREATE USER 'trinity'@'192.168.1.12' IDENTIFIED BY 'trinity';


GRANT ALL PRIVILEGES ON auth.* TO 'trinity'@'192.168.1.12' WITH GRANT OPTION;

如果是放开所有ip,那么就在原来写ip地址的地方写"%",代表所有ip:

复制代码
CREATE USER 'trinity'@'%' IDENTIFIED BY 'trinity';


GRANT ALL PRIVILEGES ON auth.* TO 'trinity'@'%' WITH GRANT OPTION;

如果权限还是不够,可以试试加上所有库*.*的权限,如:

复制代码
GRANT ALL PRIVILEGES ON *.* TO 'trinity'@'192.168.1.12' WITH GRANT
OPTION;

# GRANT ALL PRIVILEGES ON *.* TO 'trinity'@'10.0.0.2' WITH GRANT
OPTION;

为ip地址访问加上权限实践操作

首先看一下数据库中原账户的权限

复制代码
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT host, user FROM user WHERE user='trinity';
+-----------+---------+
| host      | user    |
+-----------+---------+
| localhost | trinity |
+-----------+---------+
1 row in set (0.01 sec)

host设为localhost,证明该用户默认只能从localhost登录

在增加'trinity'@'192.168.1.2'用户欧,显示:

复制代码
mysql> CREATE USER 'trinity'@'192.168.1.2' IDENTIFIED BY 'trinity';
Query OK, 0 rows affected (0.11 sec)

mysql> SELECT host, user FROM user WHERE user='trinity';
+-------------+---------+
| host        | user    |
+-------------+---------+
| 192.168.1.2 | trinity |
| localhost   | trinity |
+-------------+---------+
2 rows in set (0.00 sec)

可见已经为trinity添加了从192.168.1.2这个机器登录的权限

进行测试

使用下面python语句可以mysql数据库:

复制代码
import pymysql  
  
# 配置数据库连接  
config = {  
    'host': '192.168.1.12',  
    'user': 'trinity',  
    'password': 'trinity',  
    'database': 'auth',  
    'charset': 'utf8mb4',  
    'cursorclass': pymysql.cursors.DictCursor  
}  
  
try:  
    # 建立数据库连接  
    connection = pymysql.connect(**config)  

测试通过!

相关推荐
小天源1 分钟前
银河麒麟 V10(x86_64)离线安装 MySQL 8.0
android·mysql·adb·麒麟v10
qq_124987075338 分钟前
基于协同过滤算法的运动场馆服务平台设计与实现(源码+论文+部署+安装)
java·大数据·数据库·人工智能·spring boot·毕业设计·计算机毕业设计
数据知道1 小时前
PostgreSQL 核心原理:读已提交与可重复读的底层实现差异(事务隔离级别)
数据库·postgresql
crossaspeed1 小时前
MySQL的MVCC
数据库·mysql
2401_857683541 小时前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
luoluoal1 小时前
基于opencv的疲劳检测系统(源码+文档)
python·mysql·django·毕业设计·源码
m0_706653231 小时前
使用Python自动收发邮件
jvm·数据库·python
松涛和鸣1 小时前
DAY67 IMX6 Development Board Configuration from Scratch
数据库·postgresql·sqlserver
路由侠内网穿透.1 小时前
fnOS 飞牛云 NAS 本地部署私人影视库 MoonTV 并实现外部访问
运维·服务器·网络·数据库·网络协议
怣501 小时前
MySQL表筛选分组全解析:排序、分组与限制的艺术
数据库·mysql