我知道此命令:
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数据库怎么办?我怎么做?基本上,我将此数据库公开,以便每个人都可以访问它。
Answers:
TO 'user'@'%'
%是通配符- 如果需要,您也可以执行'%.domain.com'
或'%.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
。
启用远程访问(授予)主页/教程/ 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。因此需要更新特权。
运行如下命令从所有机器访问。(替换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;
您可以用IP替换1.2.3.4。您可以多次运行以上命令,以从多个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 database。检查您是否具有远程计算机的正确权限。
奖励提示:撤消访问权限
如果您不小心将访问权限授予了用户,则最好使用撤销选项。
以下操作将撤消所有计算机上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特权,就可以了。根本没有特权。我不确定是否可以撤销。
/etc/mysql/mysql.conf.d/mysqld.cnf
文件而不是/etc/mysql/my.cnf
注释掉bind-address
零件。#skip-networking
缺少该行,添加和注释该行应该没有效果。
/etc/mysql/mariadb.conf.d/50-server.cnf
3306
或其他任何端口您已经设置了
假设上述步骤已完成,并且可以免费远程访问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上)
stop mysql
start mysql
或#/etc/init.d/mysql restart
其他系统
现在可以通过以下方式远程访问MySQL数据库:
mysql -u username -h 192.168.0.116 -p
/etc/init.d/mysql reload
应该足够了
bind-address
指令确定mysql 服务器监听的IP地址。不是服务器接受连接的IP地址。
bind-address
localhost或remotehost地址时出现错误。mysql.serviceJob for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
需要更改配置文件才能启用通过本地主机的连接。
要通过远程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';
然后:
FLUSH PRIVILEGES;
然后在文件“ /etc/mysql/mysql.conf.d/mysqld.cnf”中注释掉以下行(必需!):
bind-address = 127.0.0.1
为我工作!
your-password-does-not-satisfy-the-current-policy-requirements
为了能够通过任何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和'%'通配符中都创建所需的用户,并按原样授予所有数据库的权限。
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的通信。
希望这可以帮助 ;)
您可以通过以下命令解决MariaDB的问题:
GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';
%
是通配符。在这种情况下,它引用所有IP地址。
要远程访问数据库Mysql服务器8:
CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
/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
只需将用户创建到某些数据库即可
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
并执行以下命令(输入您的数据库名称,用户名和密码):
*授予admin @'%',由'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
请享用 ;)
在cPanel之类的网站面板中,您可以%
在允许的主机名中添加一个(百分号)来访问您的MySQL数据库。
通过添加一个,%
您可以从任何IP或网站甚至从桌面应用程序访问数据库。
如果要授予从任何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
您可以通过编辑/etc/my.cnf禁用所有安全性:
skip-grant-tables