授予任何IP地址的MySQL数据库远程访问权限

9 浏览
0 Comments

授予任何IP地址的MySQL数据库远程访问权限

我知道这个命令:\n

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

\n但是这只允许我授予特定的IP地址来访问这个远程MySQL数据库。如果我希望任何远程主机都可以访问这个MySQL数据库,该怎么办?我要做的就是将这个数据库设为公共数据库,让每个人都可以访问它。

0
0 Comments

问题的原因是需要从任何IP地址远程访问MySQL数据库。解决方法是允许MySQL服务器接受远程连接,并创建一个具有远程访问权限的用户。

首先,打开mysqld.conf文件,可以使用以下命令:

sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf

在该文件中搜索以"bind-address"开头的行,并将其值设置为0.0.0.0:

bind-address = 0.0.0.0

保存文件。

如果运行的是MySQL 8+版本,mysqld.cnf文件中可能没有bind-address指令。在这种情况下,将此指令添加到文件的底部:/etc/mysql/mysql.conf.d/mysqld.cnf。

然后,使用systemd或service命令重新启动MySQL服务器,具体取决于操作系统:

sudo systemctl restart mysql(适用于Ubuntu)

sudo systemctl restart mysqld.service(适用于Debian)

MySQL服务器现在可以接受远程连接。

接下来,需要创建一个用户并授予其权限,以便我们可以使用此用户进行远程登录。

以root身份或任何具有root权限的其他用户连接到MySQL数据库:

mysql -u root -p

现在,在localhost和'%'通配符中创建所需的用户,并授予其对所有数据库的权限:

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

然后,授予用户在所有数据库上的所有权限:

GRANT ALL ON *.* TO 'myuser'@'localhost';

GRANT ALL ON *.* TO 'myuser'@'%';

最后不要忘记刷新权限:

FLUSH PRIVILEGES;

注意:如果在数据库服务器上配置了防火墙,则还需要打开MySQL的默认端口3306,以允许流量通过。

sudo systemctl restart mysqld.service适用于Debian,我必须使用sudo systemctl restart mysql.service适用于Ubuntu。

我更新了答案并添加了这两个发行版的MySQL重启命令。感谢提供信息。

0
0 Comments

问题出现的原因是MySQL服务器默认只允许本地访问,而不允许远程访问。为了解决这个问题,需要编辑MySQL的配置文件,并更改授权权限。

首先,打开MySQL配置文件(my.cnf):

vim /etc/mysql/my.cnf

然后,注释掉以下两行:

#bind-address           = 127.0.0.1
#skip-networking

如果找不到skip-networking这一行,可以手动添加并注释掉。

重启MySQL服务器:

~ /etc/init.d/mysql restart

接下来,需要更改授权权限。

默认情况下,使用的MySQL用户名和密码只允许在本地访问MySQL服务器。需要更新权限,可以使用以下命令:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

其中,将USERNAME和PASSWORD替换为自己的用户名和密码。

如果要给特定IP地址授权访问,可以使用以下命令:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

其中,将USERNAME和PASSWORD替换为自己的用户名和密码,将1.2.3.4替换为要授权的IP地址。可以多次运行该命令以授权多个IP地址的访问。

还可以为远程访问指定单独的用户名和密码。

可以通过以下命令来检查最终结果:

SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";

最后,可能还需要运行以下命令来刷新权限:

mysql> FLUSH PRIVILEGES;

测试连接是否成功,可以在终端或命令行中运行以下命令:

mysql -h HOST -u USERNAME -pPASSWORD

如果成功连接到MySQL shell,可以运行show databases;命令来检查是否具有远程访问的权限。

如果误将访问权限授予用户,可以使用撤销命令进行撤销。

以下命令将撤销所有用户在所有机器上的权限:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';

以下命令将撤销特定IP地址上用户的权限:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';

需要注意的是,执行REVOKE命令后,可以通过检查information_schema.user_privileges表来确认撤销的结果。

如果在执行以上操作后仍然无法连接,请检查防火墙设置,可能会阻止3306端口或其他设置的端口。

需要注意的是,'USERNAME'与'username'是不同的,所以要注意大小写。

文章来源:[Enable Remote Access (Grant)](https://rtcamp.com/tutorials/mysql/remote-access/)

0
0 Comments

问题的原因是无法从任何IP地址远程访问MySQL数据库。解决方法是使用以下命令将远程访问权限授予MySQL数据库:

GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

其中,'user'是要授予远程访问权限的用户名,'password'是该用户的密码。

这个问题可能出现的原因有很多。这个命令是用于远程访问(两台不同的机器)。如果你不是在做这个操作,那么这个命令就不适用。你仍然需要正确的密码和其他信息。

为了使更改生效,你需要使用"flush privileges;"命令。

当连接到在同一操作系统实例上运行的数据库实例(例如开发机器)时,关键是传入"-h my_machine_name"参数。这样客户端会将你标识为'user'_machine_name.example.com,而不是'user'。这样你就不需要为localhost和网络访问创建和维护两个帐户和授权。当然,确保mysqld绑定到0.0.0.0而不是127.0.0.1。

如果出现"Operation CREATE USER failed for 'remote'@'%'"错误,可以尝试以下解决方法:

1. 确保你有足够的权限执行CREATE USER操作。

2. 检查是否已经存在名为'remote'的用户。如果存在,可以尝试删除该用户并重新创建。

3. 确保在执行CREATE USER操作时提供了正确的语法和参数。

4. 如果你是在使用MySQL 8.0以上版本,需要使用CREATE USER语句的版本2。

希望以上方法能够帮助你解决远程访问MySQL数据库的问题。

0