【问题标题】:Mysql adding user for remote accessMysql添加用户进行远程访问
【发布时间】:2013-04-23 15:29:19
【问题描述】:

我用password 'password 创建了用户user@'%'。但我无法连接:

mysql_connect('localhost:3306', 'user', 'password');

当我创建用户 user@'localhost' 时,我能够连接。为什么? '%' 不是来自任何主机吗?

【问题讨论】:

  • 请注意,user@localhost 和 user@% 的密码通常不同,权限也不同。

标签: mysql remote-access


【解决方案1】:

为了远程连接,您必须让 MySQL 将端口 3306 绑定到 my.cnf 中您机器的 IP 地址。然后,您必须在 localhost 和 '%' 通配符中创建用户并授予对所有 DB 的权限,例如 见下文:

my.cnf(Windows 上的 my.ini)

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

然后:

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

然后:

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';
FLUSH PRIVILEGES;

根据您的操作系统,您可能必须打开端口 3306 才能允许远程连接。

【讨论】:

  • 这有助于我使用 WebFaction 私有 MySQL 实例。我按照您的 CREATE USER 和 GRANT ALL 步骤,在我的 php.ini 中设置mysql.default_port = <private instance port>,然后在整个数据库主机名中使用127.0.0.1
  • 别忘了刷新特权 ;)
  • 还要检查 /etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf 位置以进行更改绑定地址=0.0.0.0
  • 为什么同时使用 localhost 和 % ?
  • @VishnuS.Divetia 0.0.0.0 不是强制性的。远程访问接口的IP地址就足够了。
【解决方案2】:

按照说明进行操作(Windows 中不需要步骤 1 到 3):

  1. 找到要编辑的 mysql 配置:

/etc/mysql/my.cnf (Mysql 5.5)

/etc/mysql/conf.d/mysql.cnf (Mysql 5.6+)

  1. 在配置文件更改 bind-address=0.0.0.0 中找到 bind-address=127.0.0.1(您可以将绑定地址设置为您的接口 ips 或像我一样使用 0.0.0.0)

  2. 在控制台重启mysql服务运行: service mysql restart

  3. 为远程连接创建一个具有安全密码的用户。为此,请在 mysql 中运行以下命令(如果您是 linux 用户以访问 mysql 控制台运行 mysql 并且如果您为 root 设置密码运行 mysql -p):

    授予所有权限 ON . TO 'remote'@'%' 由“安全密码”识别 带有授权选项;`

现在您应该有一个用户名为user,密码为safe_password,具有远程连接能力。

【讨论】:

  • 更改 bind-address=0.0.0.0... 这对我有用。并授予权限
  • 允许全局绑定地址将导致严重的安全问题。而不是我们可以添加特定的 IP 地址或地址范围。
  • 第三步应该是:服务mysql重启
  • @quanly-mc 你是对的,我只是修复它。谢谢
【解决方案3】:

用户是什么数据库?看看这个例子

mysql> create database databasename;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on databasename.* to cmsuser@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

所以回到你的问题“%”运算符表示您网络中的所有计算机。

就像 aspesa 节目一样,我也确信您必须创建或更新用户。查找所有 mysql 用户:

SELECT user,password,host FROM user;

一旦你设置好你的用户,你应该能够像这样连接:

mysql -h localhost -u cmsuser -p

希望对你有帮助

【讨论】:

  • 一般来说,对于所有数据库。我只想连接,而不是选择数据库。 codemysql_connect('localhost:3306', 'user', 'password'); code
  • 你使用的是什么操作系统,Windows,Linux??
  • 您需要确保您的 IP 地址绑定到端口 3306。在 Windows 中,您可以使用 netstat -n 查看哪些端口绑定到您的 IP。如果您看到 127.0.0.1:3306,您将无法从 localhost 以外的任何地方进行连接
【解决方案4】:

我使用了一个现有用户,该用户使用 mysql_navtive_password 设置了密码

CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';

而不是

CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED BY 'password';

因此无法连接。删除一个旧的并在没有 mysql_native_password 的情况下创建一个新的就行了

【讨论】:

    【解决方案5】:

    另一种方法是使用 MySql Workbench。 转到管理-> 用户和权限-> 并在“限制到主机匹配”(来自主机)属性中将“localhost”更改为您不会授予远程访问权限的用户或使用“创建新用户”(添加帐户按钮) %' 在这个属性上而不是 localhost。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 2014-05-28
      • 2018-11-07
      • 2012-02-13
      相关资源
      最近更新 更多