我知道这命令:

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

但它只允许我授予一个特定的IP地址来访问远程MySQL数据库。如果我想让任何远程主机都能访问这个MySQL数据库呢?我怎么做呢?基本上,我将这个数据库公开,这样每个人都可以访问它。


当前回答

我看到有很多答案,但除了公认的答案,它们都很长,很短,缺乏解释。由于我无法编辑,我正在添加我的答案。阿迪特问:

公开这个数据库,这样每个人都可以访问它

GRANT ALL PRIVILEGES
ON database.*
TO 'username'@'remote_host'
IDENTIFIED BY 'password';

上面的代码授予用户从一个给定的远程主机的权限,你可以允许一个用户从任何远程主机连接到MySQL通过更改'用户名'@'yourremotehost'到'用户名'@'%'。

因此,正确的查询授予用户从任何远程主机连接的权限是:

GRANT ALL PRIVILEGES
ON database.*
TO 'username'@'%'
IDENTIFIED BY 'password';

其他回答

只要创建一个用户到某个数据库

授予<database_name>的所有权限。* TO '<用户名>'@'%' IDENTIFIED BY '<密码>'

然后转到

执行nano /etc/mysql/mysql.conf.d/mysqld.cnf,将bind-address = 127.0.0.1修改为bind-address = 0.0.0.0

之后,您可以从任何IP连接到该数据库。

启用远程访问(授权) Home /教程/ Mysql /启用远程访问(授权) 如果你试图从远程机器连接到你的mysql服务器,并遇到如下错误,这篇文章是为你准备的。

错误1130 (HY000):主机' 1.2.3.4 '不允许连接到这个 MySQL服务器

修改mysql配置

开始编辑mysql配置文件

vim /etc/mysql/my.cnf

注释掉下面的行。

#bind-address           = 127.0.0.1
#skip-networking

如果您没有找到跳网线,添加它并注释掉它。

重启mysql服务器。

~ /etc/init.d/mysql restart

变更GRANT特权

您可能会惊讶地发现,即使经过上述更改,您也无法获得远程访问权限,或者获得访问权限但无法访问所有数据库。

默认情况下,您所使用的mysql用户名和密码可以在本地访问mysql-server。所以需要更新权限。(如果你想创建一个单独的用户,你可以使用create user 'USERNAME'@'localhost' IDENTIFIED BY 'PASSWORD';)

运行如下命令从所有机器进行访问。(替换用户名和密码为您的凭证。)

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

运行如下所示的命令从特定的IP提供访问。(替换用户名和密码为您的凭证。)

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

您可以将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;检查您是否拥有来自远程机器的正确权限。

奖励-提示:撤销访问权限

如果您不小心授予用户访问权限,那么最好有一个撤销选项。

以下将撤销所有机器的USERNAME选项:

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.

如果运行REVOKE命令后看到USAGE privilege,则没有问题。这就等于没有任何特权。我不确定是否可以撤销。

GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'

使用该命令:

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';

然后:

FLUSH PRIVILEGES; 

然后注释掉文件"/etc/mysql/mysql.conf.d/mysql .cnf"(这是必须的!)

bind-address = 127.0.0.1 

对我有用!

比如我的CentOS

sudo gedit /etc/mysql/my.cnf

注释掉下面的行

#bind-address = 127.0.0.1

然后

Sudo服务mysqld重启