MySQL疑02-用户权限表问题

一 问题描述:

在本地无法直接使用本地ip(192.168.3.73)连接数据库,需将主机ip设为127.0.0.1才可连接
127.0.0.1为本地回环地址,专门用于本机网络测试

import pymysql

conn = pymysql.connect(
    # host = '127.0.0.1',            # 此处使用127.0.0.1正常连接
    host = '192.168.3.73',           # 此处改为本机的ip地址则如下报错
    port = 3306,
    user = 'root',
    password = '123',
    database = 'day48',
    charset = 'utf8'  # 编码千万不要加-
)  # 链接数据库

这是因为在MySQL的权限表中,未添加本机的ip地址,所以用本机ip来连接,会被拒接。

二、解决方案

2.1 查看权限表

# 先查看当前数据库的权限表
mysql> use mysql;
mysql> select host,user from user;

2.2 修改权限表

mysql> update user set host = "192.168.3.73" where user="root";
# 或 使用 update user set host = "%" where user = "root"; 来匹配所有ip地址,即让外部ip均可访问
mysql> select host,user from user;

三、用户表详解

MySQL是一个多用户管理的数据库,可以为不同用户分配不同的权限,分为root用户和普通用户,root用户为超级管理员,拥有所有权限,而普通用户拥有指定的权限。

MySQL是通过权限表来控制用户对数据库访问的,权限表存放在mysql数据库中,主要的权限表有以下几个:user,db,host,table_priv,columns_priv和procs_priv,先带你了解的是user表。

通常用户信息、修改用户的密码、删除用户及分配权限等就是在mysql数据库的user表中。

用户列(用户连接MySQL数据库需要输入的信息)

Host:主机名,双主键之一,值为%时表示匹配所有主机。User:用户名,双主键之一。Password:密码名。

(root,%),表示可以远程登录,并且是除服务器外的其他任何终端,%表示任意IP都可登录。
(root,localhost), 表示可以本地登录,即可以在服务器上登陆,localhost则只允许本地登录。
(root,127.0.0.1 ),表示可以本机登陆,即可以在服务器上登陆
(root,sv01),表示主机名为sv1可以登陆,sv01具体指的哪台机器,可以在cat /etc/hostname查看
(root,::1) , 表示本机可以登陆, 看密码都是相同嘛,具体::1代表意义,待查

参照:https://www.cnblogs.com/liuhaidon/archive/2019/09/12/11511129.html

原文地址:https://www.cnblogs.com/zhubincheng/p/12846294.html