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

Auf*_*ind 115 mysql connection grant

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

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ski 140

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

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%.example.com' 
    IDENTIFIED BY 'some_characters' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

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

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%'
    IDENTIFIED BY 'some_characters'  
    WITH GRANT OPTION;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

MySQL GRANT语法文档.

  • 我假设`''''''''''''''''''''''''''''''''` (15认同)
  • 请注意,"IDENTIFIED BY PASSWORD"附带一个41位十六进制数字.如果要直接包含密码,请使用"IDENTIFIED BY'password'. (10认同)
  • 我在mysql中执行了命令,但是`SHOW GRANTS`仍然显示相同(如我的问题).我甚至做过"FLUSH PRIVILGES".有什么我想念的吗? (3认同)

mos*_*eri 92

尝试:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Pa55w0rd' WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)

  • 它通常用来给占位符密码,说"把你读好的密码放在这个地方". (20认同)
  • 该命令带有通常的警告,您只想将其用于不涉及安全性的应用程序中,例如dev或QA。 (2认同)
  • 不要忘记在以下之后运行:```FLUSH PRIVILEGES;``` (2认同)

Kha*_*yar 43

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

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

  2. 检查bind-addressin的值my.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;`
    
    Run Code Online (Sandbox Code Playgroud)
  4. 重启mysql服务:

    sudo service mysql restart
    
    Run Code Online (Sandbox Code Playgroud)


Was*_* A. 32

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'YOUR_PASS' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;  
Run Code Online (Sandbox Code Playgroud)

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

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

  • 只有答案解释了`*.*`和''用户'@'地址''部分.谢谢!:) (2认同)

小智 8

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


MhD*_*DG7 6

在 mysql 8 及更高版本中,您无法通过授予权限来添加用户。这意味着这个查询:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'type-root-password-here' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

mysql 将返回此错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的“IDENTIFIED BY 'written password”附近使用的正确语法

这意味着您没有 % 域的根用户。所以你需要先插入用户,然后像这样授予权限:

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;
Run Code Online (Sandbox Code Playgroud)

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


小智 5

两步:

  1. 使用通配符设置用户:
create user 'root'@'%' identified by 'some_characters'; 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION
Run Code Online (Sandbox Code Playgroud)
vim /etc/my.cnf
Run Code Online (Sandbox Code Playgroud)

添加以下内容:

bind-address=0.0.0.0
Run Code Online (Sandbox Code Playgroud)

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