131

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

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

如果我没记错的话,root@localhost意味着用户root只能从localhost. 我如何告诉 MySQL 也授予root从所有其他机器(在同一网络中)访问此 mysql 服务器的权限?

4

11 回答 11

148

这将授予来自以下任何机器的具有相同密码的 root 访问权限*.example.com

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;

MySQLGRANT语法文档。

于 2011-06-04T20:17:38.360 回答
99

尝试:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Pa55w0rd' WITH GRANT OPTION;
于 2013-04-04T20:41:32.613 回答
48

您需要采取一些步骤来确保可以从外部访问第一个 mysql 和 root 用户:

  1. 禁用skip-networkingmy.cnf/etc/mysql/my.cnf:)

  2. 检查bind-addressinmy.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
    
于 2014-11-27T10:47:02.363 回答
38
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'YOUR_PASS' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;  

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

'root'@'%'您可以使用您创建的任何用户更改 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 并再次重复上述步骤。

Raspberry Pi,我在下面找到了 bind-address 配置\etc\mysql\mariadb.conf.d\50-server.cnf

于 2014-12-25T07:04:30.743 回答
9

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 'written 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;

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

于 2020-03-02T12:27:06.973 回答
8

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

于 2013-06-26T20:23:22.563 回答
4

两步:

  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

重新启动服务器,连接到它应该没有任何问题。

于 2017-11-29T17:12:00.220 回答
4

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

#bind-address = 127.0.0.1
于 2018-02-21T13:25:20.840 回答
3

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

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

这是关于我如何检查和解决此问题的小说明。

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

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

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

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

服务 iptables 停止

希望这可以帮助。

于 2015-09-22T09:49:03.137 回答
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 机器上的 Obvs 端口(3306)必须允许来自测试机器的连接。

mysql -u root -p -h 123.456.789.666

MySql 的所有额外“安全性”根本无助于安全性,它只会使问题复杂化和混淆,现在实际上比过去更容易搞砸,过去你只使用一个非常长的密码。

于 2020-02-08T14:48:51.137 回答
0

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

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

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

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

于 2016-03-07T11:20:34.763 回答