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

如果我在 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 服务器的权限?

483418 次浏览

这授予从 *.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语法文档。

试试:

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

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

您需要采取一些步骤来确保首先是 mysql,然后是 root 用户可以从外部访问:

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

  2. 检查 my.cnfbind-address的值,如果设置为 127.0.0.1,可以将其改为 0.0.0.0,以允许从所有 IP 或任何您想连接的 IP 进行访问。

  3. 授予远程访问根用户从任何 ip (或指定您的 ip 而不是 %)

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

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

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

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


如果解决不了这个问题,那么也修改 my.cnf 或 my.ini 并对这些行进行注释

bind-address = 127.0.0.1呼叫 #bind-address = 127.0.0.1
还有
skip-networking呼叫 #skip-networking

  • 重新启动 MySQL 并重复上述步骤。

树莓派,我在 \etc\mysql\mariadb.conf.d\50-server.cnf下找到了绑定地址配置

在我的例子中,我试图连接到 cent OS 上的一个远程 mysql 服务器。在经历了许多解决方案(授予所有特权、删除 ip 绑定、启用网络)之后,问题仍然没有得到解决。

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

下面是我如何检查和解决这个问题的一个小注释。

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

-Adding ip table rule to allow connections on the port:

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

- 不推荐在生产环境中使用这种方法,但是如果没有正确配置 iptables,添加规则可能仍然不能解决问题。在这种情况下,应采取以下措施:

service iptables stop

Hope this helps.

这招对我很管用。但是有一个奇怪的问题,即使我首先尝试那些它没有影响。我更新了 phpmyadmin 页面,并让它不知怎么工作。

如果需要访问 local-xampp-mysql,可以转到 xampp-shell-> open 命令提示符。

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

如果有人发现这个主题并且有初学者的问题,就添加这些。

两个步骤:

  1. 用通配符设置用户:
    创建用户‘ root’@’%’,标识为‘ some _ words’; 将所有特权授予 * . * TO‘ root’@’%’ 由密码‘ some _ words’识别 授予选择权


  2. 加入以下内容:
    bind-address=0.0.0.0

restart server, you should not have any problem connecting to it.

打开 /etc/mysql/mysql.conf.d/mysqld.cnf文件并注释 如下:

#bind-address = 127.0.0.1

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 机器上的 test. . Obvs 端口(3306)必须允许从测试机器连接。

mysql -u root -p -h 123.456.789.666

所有附加的 MySql“安全性”对安全性一点帮助都没有,它只是让事情变得复杂和混乱,现在搞砸它实际上比过去更容易,在过去,你只需要使用一个非常长的密码。

通过 mysql 8和更高版本,您不能通过授予特权来添加用户:

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

Mysql 将返回这个错误:

ERROR 1064(42000) : SQL 语法中有错误; 请检查 手册,对应于您的 MySQL 服务器版本的权利 在第1行靠近“ IDENTIFIED BY”“ write password”使用的语法

这意味着您没有% domain 的 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;

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