授予从任何 IP 地址远程访问 MySQL 数据库的权限
我知道这个命令:
GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';
但是它只允许我授予特定的 IP 地址来访问这个远程 MySQL 数据库。如果我想让任何远程主机都可以访问这个 MySQL 数据库怎么办?我该怎么做?基本上我将这个数据库公开,以便每个人都可以访问它。
I am aware of this command:
GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';
But then it only allows me to grant a particular IP address to access this remote MySQL database. What if I want it so that any remote host can access this MySQL database? How do I do that? Basically I am making this database public so everyone can access it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(23)
您可以通过编辑文件 /etc/my.cnf 禁用所有安全性:
You can disable all security by editing file /etc/my.cnf:
% 是通配符 - 如果需要,您还可以执行
'%.domain.example'
或'%.123.123.123'
等操作。% is a wildcard - you can also do
'%.domain.example'
or'%.123.123.123'
and things like that if you need.启用远程访问(授予)
Home / 教程 / Mysql / 启用远程访问(授予)
如果您尝试从远程计算机连接到 mysql 服务器,并遇到如下错误,那么这篇文章适合您。
更改mysql配置
从编辑mysql配置文件开始
注释掉以下行。
如果您没有找到skip-networking行,请添加它并注释掉它。
重新启动 mysql 服务器。
更改 GRANT 权限
您可能会惊讶地发现,即使在进行上述更改后,您也无法获得远程访问权限或获得访问权限但无法访问所有数据库。
默认情况下,您使用的 mysql 用户名和密码允许在本地访问 mysql-server。所以需要更新权限。 (如果您想为此目的创建单独的用户,可以使用 CREATE USER 'USERNAME'@'localhost' IDENTIFIED BY 'PASSWORD';)
运行如下命令以从所有计算机进行访问。 (将
USERNAME
和PASSWORD
替换为您的凭据。)运行如下命令以授予来自特定 IP 的访问权限。 (将
USERNAME
和PASSWORD
替换为您的凭据。)您可以将 1.2.3.4 替换为您的 IP。您可以多次运行上述命令以授予多个 IP 的访问权限。
您还可以指定单独的
USERNAME
&用于远程访问的PASSWORD
。您可以通过以下方式检查最终结果:
最后,您可能还需要运行:
测试连接
从终端/命令行
:如果您获得 mysql shell,请不要忘记运行 showdatabases;检查您是否具有远程计算机的正确权限。
额外提示:撤销访问权限
如果您不小心向用户授予了访问权限,那么最好方便地使用撤销选项。
以下将从所有计算机上撤销 USERNAME 的所有选项:
如果您在运行 REVOKE 命令后看到 USAGE 权限,那就没问题了。这和没有特权一样好。我不确定是否可以撤销。
Enable Remote Access (Grant)
Home / Tutorials / Mysql / Enable Remote Access (Grant)
If you try to connect to your mysql server from remote machine, and run into error like below, this article is for you.
Change mysql config
Start with editing mysql config file
Comment out following lines.
If you do not find skip-networking line, add it and comment out it.
Restart mysql server.
Change GRANT privilege
You may be surprised to see even after above change you are not getting remote access or getting access but not able to all databases.
By default, mysql username and password you are using is allowed to access mysql-server locally. So need to update privilege. (if you want to create a separate user for that purpose, you can use
CREATE USER 'USERNAME'@'localhost' IDENTIFIED BY 'PASSWORD';
)Run a command like below to access from all machines. (Replace
USERNAME
andPASSWORD
by your credentials.)Run a command like below to give access from specific IP. (Replace
USERNAME
andPASSWORD
by your credentials.)You can replace 1.2.3.4 with your IP. You can run above command many times to GRANT access from multiple IPs.
You can also specify a separate
USERNAME
&PASSWORD
for remote access.You can check final outcome by:
Finally, you may also need to run:
Test Connection
From terminal/command-line:
If you get a mysql shell, don’t forget to run show databases; to check if you have right privileges from remote machines.
Bonus-Tip: Revoke Access
If you accidentally grant access to a user, then better have revoking option handy.
Following will revoke all options for USERNAME from all machines:
If you see USAGE privilege after running REVOKE command, its fine. It is as good as no privilege at all. I am not sure if it can be revoked.
为了能够从任何 IP 地址与您的用户连接,请执行以下操作:
允许 MySQL 服务器接受远程连接。为此,打开mysqld.conf文件:
搜索以“bind-address”开头的行并将其值设置为0.0.0.0:
最后保存文件。
注意:如果您运行的是 MySQL 8+,默认情况下
bind-address
指令可能不在 mysqld.cnf 文件中。在这种情况下,将该指令添加到文件 /etc/mysql/mysql.conf.d/mysqld.cnf 的底部。现在重新启动 MySQL 服务器,可以使用 systemd 或使用旧的
服务
命令。这取决于您的操作系统:最后,MySQL 服务器现在能够接受远程连接。
现在我们需要创建一个用户并授予其权限,这样我们就可以使用该用户远程登录。
以 root 或任何其他具有 root 权限的用户身份连接到 MySQL 数据库。
现在在 localhost 和 '%' 通配符中创建所需的用户,并授予对所有数据库的权限这样的。
然后,
最后不要忘记刷新权限
注意:如果您在数据库服务器上配置了防火墙,则还需要打开端口
3306
MySQL 的默认端口以允许流量到达 MySQL。To be able to connect with your user from any IP address, do the following:
Allow MySQL server to accept remote connections. For this, open the mysqld.conf file:
Search for the line starting with "bind-address" and set its value to 0.0.0.0:
And finally save the file.
Note: If you’re running MySQL 8+, the
bind-address
directive may not be in the mysqld.cnf file by default. In this case, add the directive to the bottom of the file /etc/mysql/mysql.conf.d/mysqld.cnf.Now restart the MySQL server, either with systemd or use the older
service
command. This depends on your operating system:Finally, MySQL server is now able to accept remote connections.
Now we need to create a user and grant it permission, so we can be able to login with this user remotely.
Connect to MySQL database as root, or any other user with the root privilege.
Now create the desired user in both localhost and '%' wildcard and grant permissions on all DB's as such.
Then,
And finally don't forget to flush privileges
Note: If you’ve configured a firewall on your database server, you will also need to open port
3306
MySQL’s default port to allow traffic to MySQL.假设上述步骤完成,MySQL 3306端口可以自由远程访问。不要忘记在MySQL配置文件中绑定公网IP地址。
例如,在我的 Ubuntu 服务器上,作为 root:
在文件中,搜索[mysqld]节块并添加新的绑定地址。在此示例中,它是 192.168.0.116。它看起来像这样:
您可以删除 localhost (127.0.0.1) 绑定,如果您选择,但随后您必须专门给出一个 IP 地址来访问本地计算机上的服务器。
最后一步是重新启动 MySQL 服务器(在 Ubuntu 上):
对于其他系统,或者
#/etc/init.d/mysql restart
。现在可以通过以下方式远程访问 MySQL 数据库:
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 configuration file.
For example, on my Ubuntu server, as root:
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:
You can remove the 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):
Or
#/etc/init.d/mysql restart
for other systems.Now the MySQL database can be accessed remotely by:
需要更改配置文件才能通过 localhost 启用连接。
要通过远程 IP 地址进行连接,请以“root”用户身份登录并在 MySQL 中运行以下查询。
这将创建一个可在本地主机以及远程 IP 上访问的新用户。
另外,注释位于 /etc/mysql/my.cnf 中的 my.cnf 文件中的以下行:
使用以下命令重新启动 MySQL 服务器:
现在您应该能够连接远程连接到您的 MySQL 服务器。
Configuration file changes are required to enable connections via localhost.
To connect through remote IP addresses, log in as a "root" user and run the below queries in MySQL.
This will create a new user that is accessible on localhost as well as from remote IPs.
Also, comment the below line from your my.cnf file located in /etc/mysql/my.cnf:
Restart your MySQL server using:
Now you should be able to connect remotely to your MySQL server.
以下是我如何授予权限:
如上所述,
%
是一个通配符,这将允许任何 IP 地址连接到您的数据库。我在这里所做的假设是,当您连接时,您将拥有一个名为root
的用户(尽管这是默认值)。输入 root 密码就可以了。请注意,我在用户 root 周围没有任何单引号 ('
)。Here is how I got to grant the privileges:
As noted,
%
is a wildcard and this will allow any IP address to connect to your database. The assumption I make here is when you connect you'll have a user namedroot
(which is the default though). Feed in the root password and you are good to go. Note that I don't have any single quotes ('
) around the user root.使用此命令:
然后:
然后注释掉文件“/etc/mysql/mysql.conf.d/mysqld.cnf”中的以下行(必需!):
对我有用!
Use this command:
Then:
Then comment out the below line in file "/etc/mysql/mysql.conf.d/mysqld.cnf" (is required!):
Works for me!
运行以下命令:
MySQL 客户端会话:
然后尝试从您指定的 IP 地址进行连接:
您应该能够连接。
Run the following:
MySQL client session:
Then attempt a connection from the IP address you specified:
You should be able to connect.
您可以通过此命令解决MariaDB的问题:
注意:
%
是通配符。在本例中,它指的是所有 IP 地址。You can slove the problem of MariaDB via this command:
Note:
%
is a wildcard. In this case, it refers to all IP addresses.使用 MySQL 服务器 8 远程访问数据库:
To remotely access a database with MySQL server 8:
如果您正在运行 EC2 实例,请不要忘记使用 MYSQL/Aurura 在安全组中添加入站规则。
If you are running EC2 instance don't forget to add the inbound rules in security group with MYSQL/Aurura.
编辑文件:
/etc/mysql/percona-server.cnf
在文件中附加以下代码。
<代码>[mysqld]
bind-address = 0.0.0.0
创建用于远程访问的用户。
所有 linux 服务器都可以工作,
对于 MSWin c:\ 查找安装位置 \ 文件路径
Edit File:
/etc/mysql/percona-server.cnf
Append below code in file.
[mysqld]
bind-address = 0.0.0.0
Create user for remote access.
All linux server works,
For MSWin c:\ Find insatallation location \ file path
只需将用户创建到某个数据库,例如
GRANT ALL PRIVILEGES ON.* TO ''@'%' IDENTIFIED BY ''
然后转到
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf 并更改行
bind-address = 127.0.0.1
到bind-address = 0.0.0.0
之后,您可以从任何 IP 连接到该数据库。
Just create the user to some database like
GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'
Then go to
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
and change the linebind-address = 127.0.0.1
tobind-address = 0.0.0.0
After that you may connect to that database from any IP.
打开您的
mysql控制台
并执行以下命令(输入您的数据库名称、用户名和密码):然后执行:
打开命令行并使用具有
root权限
的任何编辑器打开文件/etc/mysql/mysql.conf.d/mysqld.cnf
。例如:
然后注释掉以下行:
使用命令重新启动 mysql 以反映更改:
Enjoy ;)
Open your
mysql console
and execute the following command (enter your database name,username and password):Then Execute:
Open command line and open the file
/etc/mysql/mysql.conf.d/mysqld.cnf
using any editor withroot privileges
.For example:
Then comment out the below line:
Restart mysql to reflect the changes using command:
Enjoy ;)
您需要更改 mysql 配置文件:
从编辑 mysql 配置文件开始
添加:
You need to change the mysql config file:
Start with editing mysql config file
add:
在 Ubuntu 上有效的方法是向用户授予所有权限:
并在 /etc/mysql/mysql.conf.d/mysqld.cnf 中设置绑定地址:
然后重新启动 mysql 守护进程:
what worked for on Ubuntu is granting all privileges to the user:
and setting the bind address in
/etc/mysql/mysql.conf.d/mysqld.cnf
:then restarting the mysql daemon:
然后转到这个目录“/etc/mysql/mysql.conf.d”
编辑此文件“mysqld.cnf”
编辑为
Go to this directory "/etc/mysql/mysql.conf.d" then
edit this file " mysqld.cnf"
edit to
例如在我的 CentOS 中
注释掉以下行
然后
For example in my CentOS
comment out the following lines
then
如果您想从任何 IP 地址授予对数据库的远程访问权限,请运行 mysql 命令,然后运行以下命令。
If you want to grant remote access of your database from any IP address, run the mysql command and after that run the following command.
我看到有很多答案,但除了接受的答案很短且缺乏解释之外,它们都很长。由于我无法编辑它,我正在添加我的答案。阿迪特询问:
上面的代码为来自给定远程主机的用户授予权限,您可以通过更改
TO 'username'@'yourremotehost' 来允许用户从任何远程主机连接到 MySQL
code> 到TO '用户名'@'%'
。因此,向用户授予从任何远程主机连接的权限的更正查询是:
I see there are many answers, but they are quite long ones except for the accepted answer, which is quite short and lacks explanation. As I can't edit it, I am adding my answer. Adit asked about:
Above code grants permissions for a user from a given remote host, you can allow a user to connect from any remote host to MySQL by changing
TO 'username'@'yourremotehost'
toTO 'username'@'%'
.So, the corrected query for granting permissions to a user to connect from any remote host is:
在网站面板中,例如 cPanel,您可以添加一个
%
(百分号)允许访问 MySQL 数据库的主机名。通过添加一个
%
,您可以从任何 IP 地址或网站甚至桌面应用程序访问您的数据库。In website panels, like cPanel, you may add a single
%
(percentage sign) in allowed hostnames to access your MySQL database.By adding a single
%
, you can access your database from any IP address or website even from desktop applications.