我知道这个命令:
GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';
但是它只允许我授予一个特定的 IP 地址来访问这个远程 MySQL 数据库。如果我想要它以便任何远程主机都可以访问这个 MySQL 数据库怎么办?我怎么做?基本上我将这个数据库公开,以便每个人都可以访问它。
TO 'user'@'%'
% 是一个通配符——如果你需要,你也可以做类似'%.domain.com'
的'%.123.123.123'
事情。
Enable Remote Access (Grant) Home / Tutorials / Mysql / Enable Remote Access (Grant) 如果您尝试从远程机器连接到您的 mysql 服务器,并遇到如下错误,本文适合您。
ERROR 1130 (HY000): Host '1.2.3.4' is not allowed to connect to this MySQL server
更改mysql配置
从编辑 mysql 配置文件开始
vim /etc/mysql/my.cnf
注释掉以下几行。
#bind-address = 127.0.0.1
#skip-networking
如果您没有找到 skip-networking 行,请将其添加并注释掉。
重启mysql服务器。
~ /etc/init.d/mysql restart
更改 GRANT 权限
您可能会惊讶地发现,即使在进行了上述更改之后,您也没有获得远程访问权限或获得访问权限但无法访问所有数据库。
默认情况下,允许您使用的 mysql 用户名和密码在本地访问 mysql-server。所以需要更新权限。(如果你想为此目的创建一个单独的用户,你可以使用CREATE USER 'USERNAME'@'localhost' IDENTIFIED BY 'PASSWORD';
)
运行如下命令以从所有机器访问。(用您的凭据替换USERNAME
和。)PASSWORD
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
运行如下命令以从特定 IP 授予访问权限。(用您的凭据替换USERNAME
和。)PASSWORD
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 特权,那很好。这和没有特权一样好。我不确定它是否可以撤销。
Assuming that the above step is completed and MySql port 3306 is free to be accessed remotely; Don't forget to bind the public ip address in the mysql config file.
For example on my ubuntu server:
#nano /etc/mysql/my.cnf
In the file, search for the [mysqld] section block and add the new bind address, in this example it is 192.168.0.116. It would look something like this
......
.....
# 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
.....
......
you can remove th localhost(127.0.0.1) binding if you choose, but then you have to specifically give an IP address to access the server on the local machine.
Then the last step is to restart the MySql server (on ubuntu)
stop mysql
start mysql
or #/etc/init.d/mysql restart
for other systems
Now the MySQL database can be accessed remotely by:
mysql -u username -h 192.168.0.116 -p
要能够从任何 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
。
systemd
现在使用或使用旧service
命令重新启动 mysql 服务器。这取决于您的操作系统:
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。
希望这可以帮助 ;)
需要更改配置文件才能通过 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;
这将创建一个新用户,该用户可在 localhost 和远程 IP 上访问。
还要从位于 /etc/mysql/my.cnf 中的 my.cnf 文件中注释以下行
bind-address = 127.0.0.1
使用重启你的mysql
sudo service mysql restart
现在您应该能够远程连接到您的 mysql。
对于任何对此感到困惑的人,这是我授予特权的方式,希望对某人有所帮助
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
为我工作!
运行以下命令:
$ 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
您应该能够连接。
您可以通过以下命令解决 MariaDB 的问题:
GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';
%
是通配符。在这种情况下,它指的是所有 IP 地址。
远程访问数据库Mysql server 8:
CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
/etc/mysql/percona-server.cnf
[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
如果您正在运行 EC2 实例,请不要忘记使用 MYSQL/Aurura 在安全组中添加入站规则。
打开您的mysql console
并执行以下命令(输入您的数据库名称、用户名和密码):
GRANT ALL ON yourdatabasename.* TO admin@'%' IDENTIFIED BY 'yourRootPassword';
然后执行:
同花顺特权;
打开命令行并/etc/mysql/mysql.conf.d/mysqld.cnf
使用带有root privileges
.
例如:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
然后注释掉下面一行:
绑定地址 = 127.0.0.1
使用命令重新启动 mysql 以反映更改:
sudo service mysql restart
享受 ;)
只需将用户创建到某个数据库,例如
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 配置文件:
从编辑 mysql 配置文件开始
vim /etc/mysql/my.cnf
添加:
bind-address = 0.0.0.0
在 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
在像 cPanel 这样的网站面板中,您可以在允许的主机名中添加一个%
(百分号)来访问您的 MySQL 数据库。
通过添加一个%
,您可以从任何 IP 或网站甚至从桌面应用程序访问您的数据库。
例如在我的 CentOS
须藤gedit /etc/mysql/my.cnf
注释掉以下几行
#绑定地址 = 127.0.0.1
然后
sudo 服务 mysqld 重启
如果要从任何 IP 地址授予对数据库的远程访问权限,请运行 mysql 命令,然后运行以下命令。
GRANT ALL PRIVILEGES ON *.*
TO 'root'@'%'
IDENTIFIED BY 'password'
WITH GRANT OPTION;
我看到有很多答案,但是除了公认的答案很短且缺乏解释外,它们都很长。由于我无法编辑它,我正在添加我的答案。阿迪特询问:
将此数据库公开,以便每个人都可以访问它
GRANT ALL PRIVILEGES
ON database.*
TO 'username'@'remote_host'
IDENTIFIED BY 'password';
上面的代码为来自给定远程主机的用户授予权限,您可以通过TO 'username'@'yourremotehost'
将TO 'username'@'%'
.
因此,授予用户从任何远程主机连接的权限的更正查询是:
GRANT ALL PRIVILEGES
ON database.*
TO 'username'@'%'
IDENTIFIED BY 'password';
您可以通过编辑 /etc/my.cnf 来禁用所有安全性:
skip-grant-tables