允许所有远程连接,MySQL

ste*_*son 58 mysql

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

GRANT ALL ON *.* to user@address IDENTIFIED BY 'password'; 
flush privileges;
Run Code Online (Sandbox Code Playgroud)

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

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

Ica*_*rus 145

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

GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password'; 
Run Code Online (Sandbox Code Playgroud)

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

换一种说法; 以便用户user能够从任何服务器连接; 需要创建2个帐户,如下所示:

GRANT ALL ON *.* to user@localhost IDENTIFIED BY 'password'; 
GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password'; 
Run Code Online (Sandbox Code Playgroud)

阅读完整的文档.

以下是相关的参考资料:

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

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

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

有必要让monty帐户能够从任何地方连接为monty.如果没有localhost帐户,当monty从本地主机连接时,mysql_install_db创建的localhost的匿名用户帐户将优先.因此,monty将被视为匿名用户.这样做的原因是匿名用户帐户具有比'monty'@'%'帐户更具体的主机列值,因此在用户表排序顺序中更早出现.(用户表排序将在第6.2.4节"访问控制,第1阶段:连接验证"中讨论.)

这对我来说似乎很愚蠢,除非我误解了这一点.


Dav*_*ker 25

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

[mysqld]
skip-grant-tables
Run Code Online (Sandbox Code Playgroud)


Rya*_*yan 11

GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password'; 
Run Code Online (Sandbox Code Playgroud)

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

这很糟糕,因为它删除了一些安全控制,即帐户遭到入侵.

  • 我不得不改变的另一件事是TCP绑定接口.由于我必须连接到云托管的mysql实例,我在/etc/mysql/my.cnf中更改了"bind-address = 0.0.0.0",默认为127.0.0.1,其中mysql仅在本地环回接口上侦听并且不采取来自外部网络的电话. (3认同)

小智 10

安装和设置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
Run Code Online (Sandbox Code Playgroud)

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

使用从服务器登录DB

mysql -u root -p

使用以下语句创建DB用户

grant all privileges on *.* to ‘username’@‘%’ identified by ‘password’;
Run Code Online (Sandbox Code Playgroud)

打开防火墙:

sudo ufw allow 3306
Run Code Online (Sandbox Code Playgroud)

重启mysql

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