允许从任何IP地址远程访问MySQL数据库

我知道这命令:

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

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

1017230 次浏览
TO 'user'@'%'

%是通配符-如果需要,你也可以使用'%.domain.example''%.123.123.123'之类的方法。

假设以上步骤已经完成,MySql端口3306可以远程访问;不要忘记在mysql配置文件中绑定公网ip地址。

例如在我的ubuntu服务器上:

#nano /etc/mysql/my.cnf

在文件中,搜索(mysqld)节块并添加新的绑定地址,在本例中为192.168.0.116。它看起来是这样的

......
.....
# 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


.....
......

如果你愿意,你可以删除localhost(127.0.0.1)绑定,但是你必须明确地给出一个IP地址来访问本地机器上的服务器。

然后最后一步是重新启动MySql服务器 (在ubuntu) < / p >

stop mysql


start mysql

#/etc/init.d/mysql restart用于其他系统

现在MySQL数据库可以通过以下方式远程访问:

mysql -u username -h 192.168.0.116 -p

在像cPanel这样的网站面板中,你可以在允许的主机名中添加一个%(百分比符号)来访问你的MySQL数据库。

通过添加一个%,你可以从任何IP或网站甚至桌面应用程序访问你的数据库。

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

您可以通过编辑/etc/my.cnf来禁用所有安全:

skip-grant-tables

对于那些搞砸了的人,这是我如何授予特权的,希望它能帮助到一些人

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

如上所述,%是一个通配符,这将允许任何IP地址连接到您的数据库。我在这里做的假设是,当你连接时,你会有一个名为root的用户(这是默认的)。输入根密码,就可以开始了。注意,root用户周围没有单引号(')。

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

ERROR 1130 (HY000):主机' 1.2.3.4 '不允许连接到这个 MySQL服务器< / p >

修改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';)

运行如下命令从所有机器进行访问。(将USERNAMEPASSWORD替换为您的凭证。)

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

运行如下所示的命令从特定的IP提供访问。(将USERNAMEPASSWORD替换为您的凭证。)

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

您可以将1.2.3.4替换为您的IP。可以多次执行以上命令授予多个ip的访问权限。

你也可以指定一个单独的USERNAME &PASSWORD用于远程访问。

你可以通过以下方法查看最终结果:

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,则没有问题。这就等于没有任何特权。我不确定是否可以撤销。

执行如下命令:

$ mysql -u root -p
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';
mysql> FLUSH PRIVILEGES;
mysql> exit

然后尝试从您指定的IP地址进行连接:

mysql -h address-of-remove-server -u root -p

你应该能够连接。

需要更改配置文件才能通过本地主机启用连接。

要通过远程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;

这将创建一个在本地主机和远程ip上都可以访问的新用户。

还要注释位于/etc/mysql/my.cnf中的my.cnf文件中的下面一行

bind-address = 127.0.0.1

重新启动mysql

sudo service mysql restart

现在你应该可以远程连接到你的mysql了。

比如我的CentOS

Sudo gedit /etc/mysql/my.cnf

注释掉下面的行

#bind-address = 127.0.0.1

然后

Sudo服务mysqld重启

  • 使用admin用户启动MYSQL
    • mysql -u admin-user -p (PASSWORD ON PROMPT)
    • 李< / ul > < / >
      • 创建用户“newuser”@“%”(% -> anyhost)
      • 李< / ul > < / > <李>授予特权:
        • 对db_name授权SELECT,DELETE,INSERT,UPDATE。*到'newuser'@'%';
        • 冲洗特权;
        • 李< / ul > < / >

        如果您正在运行EC2实例,不要忘记在MYSQL/Aurura安全组中添加入站规则。

编辑文件:

/etc/mysql/percona-server.cnf

在文件中附加以下代码。

< p > <代码> (mysqld) Bind-address = 0.0.0.0

创建远程访问用户。

$ mysql -u root -p
mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';
mysql> FLUSH PRIVILEGES;
mysql> exit

所有linux服务器工作,

对于MSWin c:\查找安装位置\文件路径

你可以通过这个命令来解决MariaDB的问题:

注意:

GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';

%是一个通配符。在本例中,它指所有IP地址。

使用该命令:

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

然后:

FLUSH PRIVILEGES;

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

bind-address = 127.0.0.1

对我有用!

你需要修改mysql的配置文件:

开始编辑mysql配置文件

vim /etc/mysql/my.cnf

添加:

bind-address = 0.0.0.0

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

GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'

然后转到

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf并将行bind-address = 127.0.0.1更改为bind-address = 0.0.0.0

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

打开你的mysql console并执行以下命令(输入你的数据库名、用户名和密码):

GRANT ALL ON yourdatabasename. >到管理员@“%” “yourRootPassword”;< / p >

然后执行:

冲洗特权;

打开命令行,使用任何带有root privileges的编辑器打开文件/etc/mysql/mysql.conf.d/mysqld.cnf

例如:

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

然后注释掉下面这行:

Bind-address = 127.0.0.1

使用命令重新启动mysql以反映更改:

sudo service mysql restart

喜欢。)

如果您希望从任何IP地址授予数据库的远程访问权限,请运行mysql命令,然后运行以下命令。

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

适用于Ubuntu的是授予用户所有权限:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;

并在/etc/mysql/mysql.conf.d/mysqld.cnf中设置绑定地址:

bind-address            = 0.0.0.0

然后重新启动mysql守护进程:

service mysql restart

远程访问Mysql server 8数据库。

CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';


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


FLUSH PRIVILEGES;

要能够从任何IP地址连接到您的用户,请执行以下操作:

允许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+,默认情况下bind-address指令不会在mysqld.cnf文件中。在本例中,将指令添加到文件/etc/mysql/mysql.conf.d/mysqld.cnf的底部。

现在重新启动mysql服务器,使用systemd或使用旧的service命令。这取决于你的操作系统:

sudo systemctl restart mysql # for ubuntu
sudo systemctl restart mysqld.service # for debian

最后,mysql服务器现在可以接受远程连接了。

现在我们需要创建一个用户并授予它权限,这样我们就可以使用该用户远程登录。

以root用户或其他具有root权限的用户连接MySQL数据库。

mysql -u root -p

现在在localhost和'%'通配符中创建所需的用户,并授予所有DB的权限。

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。

希望这对你有所帮助;)

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

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

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

上面的代码为一个用户从一个给定的远程主机授予权限,你可以允许一个用户从任何远程主机连接到MySQL,方法是将TO 'username'@'yourremotehost'改为TO 'username'@'%'

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

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

进入这个目录"/etc/mysql/mysql.conf.d"然后 编辑此文件"mysqld.cnf" < / p >

纳米mysqld.cnf美元

bind-address            = 127.0.0.1


mysqlx-bind-address     = 127.0.0.1

编辑,

bind-address            = 0.0.0.0


mysqlx-bind-address     = 0.0.0.0