如何为用户授予mysql服务器的远程访问权限?

时间:2011-06-04 20:15:03

标签: mysql connection grant

如果我在我的mysql数据库中SHOW GRANTS,我会得到

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION

如果我没有弄错,root@localhost表示用户root只能从localhost访问服务器。如何告诉MySQL授予root从其他所有计算机(在同一网络中)访问此mysql服务器的权限?

11 个答案:

答案 0 :(得分:140)

这将使用*.example.com中的任何计算机的相同密码授予root访问权限:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%.example.com' 
    IDENTIFIED BY 'some_characters' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

如果名称解析不起作用,您还可以通过IP或子网授予访问权限:

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

MySQL GRANT syntax docs.

答案 1 :(得分:89)

尝试:

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

答案 2 :(得分:43)

您需要采取一些措施来确保可以从外部访问第一个mysql然后root用户:

  1. skip-networking中禁用my.cnf(即:/etc/mysql/my.cnf

  2. 检查bind-addressmy.cnf的值,如果设置为127.0.0.1,则可以将其更改为0.0.0.0以允许从所有IP或任何IP访问你想要连接的。

  3. 从任何ip授予对root用户的远程访问权限(或指定你的ip而不是%

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
        IDENTIFIED BY 'your_root_password'
        WITH GRANT OPTION;
    FLUSH PRIVILEGES;`
    
  4. 重启mysql服务:

    sudo service mysql restart
    

答案 3 :(得分:32)

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

*.* = DB.TABLE您可以将用户限制为特定数据库和特定表。

'root'@'%'您可以使用您创建的任何用户更改root,%是允许所有IP。您也可以通过更改%.168.1.1等来限制它。

答案 4 :(得分:8)

那些SQL授予其他人共享做的工作。如果您仍然无法访问数据库,则可能只有端口的防火墙限制。这取决于您的服务器类型(以及介于两者之间的任何路由器)如何打开连接。打开TCP端口3306入站,并为外部计算机(所有/子网/单个IP /等)提供类似的访问规则。

答案 5 :(得分:4)

在mysql 8和更高版本中,不能通过授予特权来添加用户。这意味着使用此查询:

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

mysql将返回此错误:

错误1064(42000):您的SQL语法有错误;检查 与您的MySQL服务器版本相对应的手册 在第1行的'IDENTIFIED BY'书面密码'附近使用的语法

这意味着您没有%域的root用户。因此,您需要先插入用户,然后授予这样的特权:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'your password';
Query OK, 0 rows affected (0.11 sec)

mysql> GRANT ALL ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.15 sec)

mysql> FLUSH PRIVILEGES;

不要忘记用您的特定密码替换密码。

答案 6 :(得分:3)

在我的情况下,我试图连接到分操作系统上的远程mysql服务器。经过很多解决方案(授予所有权限,删除IP绑定,启用网络)问题仍未解决。

事实证明,在研究各种解决方案时,我遇到了iptables,这让我意识到mysql端口3306不接受连接。

以下是关于我如何检查并解决此问题的小说明。

  • 检查端口是否接受连接:
telnet (mysql server ip) [portNo]

- 添加ip表规则以允许端口上的连接:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

- 不建议将其用于生产环境,但如果未正确配置iptables,则添加规则可能仍无法解决问题。在这种情况下,应该完成以下操作:

service iptables stop

希望这有帮助。

答案 7 :(得分:2)

两个步骤:

  1. 使用通配符设置用户:
    create user 'root'@'%' identified by 'some_characters'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'some_characters' WITH GRANT OPTION

  2. vim /etc/my.cnf
    添加以下内容:
    bind-address=0.0.0.0

  3. 重新启动服务器,连接它时不应该有任何问题。

答案 8 :(得分:2)

打开/etc/mysql/mysql.conf.d/mysqld.cnf文件并发表评论 以下一行:

#bind-address = 127.0.0.1

答案 9 :(得分:0)

这对我有用。但是有一个奇怪的问题,即使我首先尝试它没有影响。我更新了phpmyadmin页面,并以某种方式工作。

如果需要访问local-xampp-mysql。你可以去xampp-shell - >打开命令提示符。

然后mysql -uroot -p --port = 3306或mysql -uroot -p(如果有密码设置)。之后,您可以从mysql shell页面授予这些访问权限(也可以从localhost / phpmyadmin工作)。

如果有人发现这个主题并且遇到初学者问题,只需添加这些内容。

答案 10 :(得分:0)

Ubuntu 18.04

安装并确保mysqld我们正在运行。

进入数据库并设置root用户:

sudo mysql -u root
SELECT User,Host FROM mysql.user;
DROP USER 'root'@'localhost';
CREATE USER 'root'@'%' IDENTIFIED BY 'obamathelongleggedmacdaddy';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

编辑mysqld权限并重新启动:

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

# edit the line to be this:
bind-address=0.0.0.0

sudo systemctl stop mysql
sudo systemctl start mysql

在另一台机器上进行测试。.mysqld机器上的Obvs端口(3306)必须允许来自测试机器的连接。

mysql -u root -p -h 123.456.789.666

MySql的所有其他“安全性”根本没有帮助安全性,它只是使情况变得复杂和模糊不清,现在实际上比以前使用一个很长的密码比以前更容易搞砸它。 / p>