授予从任何IP地址远程访问MySQL数据库的权限

时间:2011-12-01 21:25:10

标签: mysql grant

我知道这个命令:

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

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

21 个答案:

答案 0 :(得分:238)

TO 'user'@'%'

%是一个通配符 - 如果需要,您还可以执行'%.domain.com''%.123.123.123'之类的事情。

答案 1 :(得分:146)

启用远程访问(授权) 主页/教程/ Mysql /启用远程访问(授权) 如果您尝试从远程计算机连接到您的mysql服务器,并遇到如下错误,本文适合您。

  

ERROR 1130(HY000):主机“1.2.3.4”不允许连接到此   MySQL服务器

更改mysql配置

从编辑mysql配置文件开始

vim /etc/mysql/my.cnf

注释掉以下几行。

#bind-address           = 127.0.0.1
#skip-networking

如果您没有找到skip-networking line,请添加并注释掉它。

重启mysql服务器。

~ /etc/init.d/mysql restart

更改GRANT权限

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

默认情况下,允许使用的mysql用户名和密码在本地访问mysql-server。所以需要更新权限。

运行如下命令以从所有计算机访问。 (用您的凭据替换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;

您可以用您的IP替换1.2.3.4。您可以多次运行上述命令以从多个IP进行GRANT访问。

您还可以指定单独的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权限,那就没问题了。它完全没有特权。我不确定它是否可以撤销。

答案 2 :(得分:37)

假设完成上述步骤并且可以远程访问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

答案 3 :(得分:24)

对于那些摸不着头脑的人来说,这就是我如何授予权限,希望它可以帮助某人

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

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

答案 4 :(得分:21)

需要配置文件更改才能通过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。

答案 5 :(得分:19)

使用此命令:

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

然后:

FLUSH PRIVILEGES; 

然后在文件" /etc/mysql/mysql.conf.d/mysqld.cnf"中注释掉下面一行; (是必需的!):

bind-address = 127.0.0.1 

适合我!

答案 6 :(得分:17)

运行以下命令:

$ 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   

你应该可以连接。

答案 7 :(得分:15)

您可以通过this command来解决MariaDB的问题:

注意:

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

%是一个通配符。在这种情况下,它指的是所有IP地址。

答案 8 :(得分:8)

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

答案 9 :(得分:5)

编辑文件:

/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

所有Linux服务器都可以,

对于MSWin c:\查找insatallation location \ file path

答案 10 :(得分:4)

  • 使用admin用户启动MYSQL
    • mysql -u admin-user -p(输入PASSWORD ON PROMPT)
  • 创建新用户:
    • 创建用户'newuser'@'%'IDENTIFIED BY'password'; (% - > anyhost)
  • 授予权限:
    • GRANT SELECT,DELETE,INSERT,UPDATE ON db_name。* TO'newsuser'@'%';
    • FLUSH PRIVILEGES;

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

答案 11 :(得分:4)

要远程访问数据库Mysql服务器8:

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

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

FLUSH PRIVILEGES;

答案 12 :(得分:3)

只需将用户创建为某个数据库,例如

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连接到该数据库。

答案 13 :(得分:3)

打开您的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

享受;)

答案 14 :(得分:3)

要能够通过任何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

最后保存文件。

现在使用systemd或使用旧的service命令重新启动mysql服务器:

sudo systemctl restart mysqld.service

最后,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;

希望这会有所帮助;)

答案 15 :(得分:2)

您需要更改mysql配置文件:

从编辑mysql配置文件开始

vim /etc/mysql/my.cnf

添加:

bind-address = 0.0.0.0

答案 16 :(得分:0)

例如在我的CentOS中

  

sudo gedit /etc/mysql/my.cnf

注释掉以下几行

  

#bind-address = 127.0.0.1

然后

  

sudo service mysqld restart

答案 17 :(得分:0)

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

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

答案 18 :(得分: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

答案 19 :(得分:0)

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

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

答案 20 :(得分:-7)

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

skip-grant-tables