如果我在我的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服务器的权限?
答案 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;
答案 1 :(得分:89)
尝试:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Pa55w0rd' WITH GRANT OPTION;
答案 2 :(得分:43)
您需要采取一些措施来确保可以从外部访问第一个mysql然后root用户:
在skip-networking
中禁用my.cnf
(即:/etc/mysql/my.cnf
)
检查bind-address
中my.cnf
的值,如果设置为127.0.0.1
,则可以将其更改为0.0.0.0
以允许从所有IP或任何IP访问你想要连接的。
从任何ip授予对root用户的远程访问权限(或指定你的ip而不是%
)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
IDENTIFIED BY 'your_root_password'
WITH GRANT OPTION;
FLUSH PRIVILEGES;`
重启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)
两个步骤:
使用通配符设置用户:
create user 'root'@'%' identified by 'some_characters';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
IDENTIFIED BY PASSWORD 'some_characters'
WITH GRANT OPTION
vim /etc/my.cnf
添加以下内容:
bind-address=0.0.0.0
重新启动服务器,连接它时不应该有任何问题。
答案 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>