我知道这个命令:
GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';
但是它只允许我授予特定的IP地址访问这个远程MySQL数据库。如果我想让任何远程主机都可以访问这个MySQL数据库呢?我该怎么做?基本上我要把这个数据库公开,让每个人都能够访问它。
我知道这个命令:
GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';
但是它只允许我授予特定的IP地址访问这个远程MySQL数据库。如果我想让任何远程主机都可以访问这个MySQL数据库呢?我该怎么做?基本上我要把这个数据库公开,让每个人都能够访问它。
TO 'user'@'%'
% 是通配符 - 如果需要,你也可以使用诸如 '%.domain.example'
或者 '%.123.123.123'
这样的格式。
-h my_machine_name
参数是关键。这会欺骗客户端将您识别为'user'@my_machine_name.example.com
,而不是'user'@localhost
。这样,您就不需要为localhost
和网络访问创建和维护双重帐户和授权。当然,确保mysqld
绑定到0.0.0.0
而不是127.0.0.1
也很重要。 - Charlie Reitzelvim /etc/mysql/my.cnf
#bind-address = 127.0.0.1
#skip-networking
~ /etc/init.d/mysql restart
更改GRANT权限
你可能会惊讶地发现,即使在上述更改之后,你仍然无法远程访问或者虽然能够访问但无法访问所有数据库。
默认情况下,你正在使用的mysql用户名和密码只允许在本地访问mysql服务器。因此需要更新权限。(如果你想为此目的创建一个单独的用户,你可以使用CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';
)
运行以下命令以从所有机器访问。(用你的凭据替换用户名
和密码
)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
USERNAME
和PASSWORD
)。mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
用户名
和密码
。SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";
mysql> FLUSH PRIVILEGES;
mysql -h HOST -u USERNAME -pPASSWORD
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.
/etc/mysql/mysql.conf.d/mysqld.cnf
文件而不是 /etc/mysql/my.cnf
文件来注释掉 bind-address
部分。缺少 #skip-networking
行,添加和注释该行不会产生任何影响。 - Pawan/etc/mysql/mariadb.conf.d/50-server.cnf
。 - Kwadz3306
或您设置的任何端口。 - avnsudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
bind-address
指令不会在mysqld.cnf文件中。在这种情况下,请将该指令添加到文件/etc/mysql/mysql.conf.d/mysqld.cnf的底部。service
命令。这取决于您的操作系统。sudo systemctl restart mysql # for ubuntu
sudo systemctl restart mysqld.service # for debian
最后,MySQL服务器现在可以接受远程连接。
现在我们需要创建一个用户并授予权限,这样我们就可以使用这个用户进行远程登录。
以root身份或任何其他具有root特权的用户连接到MySQL数据库。
mysql -u root -p
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;
3306
,这是MySQL的默认端口,以允许流量访问MySQL。nano /etc/mysql/my.cnf
......
.....
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
bind-address = 192.168.0.116
.....
......
stop mysql
start mysql
#/etc/init.d/mysql restart
。mysql -u username -h 192.168.0.116 -p
/etc/init.d/mysql reload
应该足够。 - Lorenz Lo Sauerbind-address
指令确定 mysql 服务器所监听的 IP 地址,而不是服务器接受连接的 IP 地址。 - GoZonerbind-address
时,我会收到一个错误,无论是localhost还是remotehost地址。 `mysql.serviceJob for mysql.service failed because the control process exited with error code. 请参阅“systemctl status mysql.service”和“journalctl -xe”获取详细信息。 - sunwarr10r需要更改配置文件以启用通过 localhost 的连接。
要通过远程 IP 地址进行连接,请使用 "root" 用户登录并在 MySQL 中运行以下查询。
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
bind-address = 127.0.0.1
sudo service mysql restart
GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';
如前所述,%
是一个通配符,这将允许任何 IP 地址连接到您的数据库。我在此假设当您连接时,会有一个名为 root
的用户(这是默认的)。输入 root 密码,然后您就可以开始使用了。请注意,我对用户 root 没有使用任何单引号 ('
)。
请使用以下命令:
GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';
那么:
FLUSH PRIVILEGES;
请将以下代码注释在文件"/etc/mysql/mysql.conf.d/mysqld.cnf"中(这一步是必需的!):
#bind-address = 127.0.0.1
bind-address = 127.0.0.1
没问题!
mysql -u root -p
GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';
FLUSH PRIVILEGES;
exit
mysql -h address-of-remove-server -u root -p
您可以通过此命令解决MariaDB的问题:
GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';
%
是通配符。在这种情况下,它指代所有的IP地址。
CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;