76

我一直在使用 SQL Server,现在正在将 MySQL 用于一个项目。使用 SQL Server,如果我们的开发人员知道主机、用户名和密码,他们就可以连接到本地计算机上的远程数据库。但是,对于 MySQL,为了让开发人员可以从他们的本地计算机访问,我不得不登录 MySQL 并执行:

GRANT ALL ON *.* to user@address IDENTIFIED BY 'password'; 
flush privileges;

address开发者机器的IP地址在哪里。当然,如果他们改变网络,我必须再次执行它。有没有办法像我在 SQL Server 上体验过的那样允许所有远程连接,或者出于某种原因这是一个坏主意?我们还有用户名和密码。我显然有点困惑。

另外:这是一个开发数据库,​​只能从我们的内部网络访问。我理解为什么让每个人都可以访问生产数据库是个坏主意。

4

7 回答 7

174

正如上面 Ryan 所指出的,您需要的命令是

GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password'; 

但是,请注意,文档表明,要使其正常工作,localhost必须为同一用户创建另一个用户帐户;否则,自动创建的匿名帐户mysql_install_db优先,因为它具有更具体的主机列。

换句话说; 为了让用户user能够从任何服务器进行连接;2个账户需要创建如下:

GRANT ALL ON *.* to user@localhost IDENTIFIED BY 'password'; 
GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password'; 

在此处阅读完整文档

这是相关的参考资料:

以 root 身份连接到服务器后,您可以添加新帐户。以下语句使用 GRANT 设置四个新帐户:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'admin'@'localhost';
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> CREATE USER 'dummy'@'localhost';

这些语句创建的帐户具有以下属性:

其中两个帐户的用户名是 monty,密码是 some_pass。这两个帐户都是超级用户帐户,具有执行任何操作的完全权限。'monty'@'localhost' 帐户只能在从本地主机连接时使用。'monty'@'%' 帐户使用 '%' 通配符作为主机部分,因此它可用于从任何主机连接。

必须同时拥有 monty 的两个帐户才能从任何地方以 monty 的身份进行连接。如果没有 localhost 帐户,当 monty 从本地主机连接时,由 mysql_install_db 创建的 localhost 的匿名用户帐户将优先。因此,monty 将被视为匿名用户。原因是匿名用户帐户比 'monty'@'%' 帐户具有更具体的主机列值,因此在用户表排序顺序中排在前面。(用户表排序在第 6.2.4 节“访问控制,第 1 阶段:连接验证”中讨论。)

于 2012-04-19T20:27:13.883 回答
26

您可以通过编辑 /etc/my.cnf 来禁用所有安全性:

[mysqld]
skip-grant-tables
于 2013-10-01T12:25:02.933 回答
15
GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password'; 

将允许特定用户从任何地方登录。

这很糟糕,因为它删除了一些安全控制,即如果帐户被盗用。

于 2012-04-19T20:15:11.463 回答
15

安装和设置 mysql 以从任何地方远程连接不适用于mysql_secure_installation !https://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html

在 Ubuntu 上,使用以下命令安装 mysql:

sudo apt-get install mysql-server

在 /etc/mysql/my.cnf 中只有以下内容

[mysqld]
#### Unix socket settings (making localhost work)
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock

#### TCP Socket settings (making all remote logins work)
port            = 3306
bind-address = 0.0.0.0

使用从服务器登录数据库

mysql -u 根目录 -p

使用以下语句创建数据库用户

grant all privileges on *.* to ‘username’@‘%’ identified by ‘password’;

打开防火墙:

sudo ufw allow 3306

重启mysql

sudo service mysql restart
于 2017-06-20T23:42:29.687 回答
2

您还需要在配置文件中禁用以下行: bind-address = 127.0.0.1

于 2015-04-22T14:06:33.867 回答
1
mysql> CREATE USER 'monty'@'192.168.%.%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'192.168.%.%'
于 2015-12-02T10:20:33.840 回答
1

你只需要:

第一步:

grant all privileges on *.* to 'user'@'IP' identified by 'password';

或者

grant all privileges on *.* to 'user'@'%' identified by 'password';

第二步:

sudo ufw allow 3306

第三步:

sudo service mysql restart
于 2019-03-24T01:01:36.317 回答