允许所有远程连接,MySQL
我一直在使用SQL Server,现在正在使用MySQL作为项目。 使用SQL Server,如果我们的开发人员知道主机,用户名,密码,就可以连接到本地机器上的远程数据库。 但是使用MySQL,为了让开发人员能够从本地机器访问,我一直不得不login到MySQL并执行:
GRANT ALL ON *.* to user@address IDENTIFIED BY 'password'; flush privileges;
address
是开发者机器的IP地址。 当然,如果他们改变networking,我必须再次执行它。 有没有办法让所有的远程连接,如我曾经与SQL Server的经验,或者这是一个坏主意,出于某种原因? 我们有用户名和密码仍然..我显然有点困惑。
另外:这是一个开发数据库,只能从我们的内部networking访问。 我明白为什么给每个人访问生产数据库是一个坏主意。
正如上面Ryan所指出的,你需要的命令是
GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password';
但是,请注意,文档指出为了使其工作,必须为同一用户创buildlocalhost
另一个用户帐户; 否则,由mysql_install_db
自动创build的匿名帐户优先,因为它有一个更具体的主机列。
换一种说法; 为了使用户能够从任何服务器连接; 需要创build2个账户如下:
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';
这些语句创build的帐户具有以下属性:
其中两个帐户的用户名为monty,密码为some_pass。 这两个帐户都是具有完全权限的超级用户帐户。 只有从本地主机连接时才能使用'monty'@'localhost'帐户。 'monty'@'%'帐户使用主机部分的'%'通配符,所以它可以用来从任何主机连接。
有必要有两个帐户monty能够连接从任何地方monty 。 如果没有本地主机帐户,monty从本地主机连接时,由mysql_install_db创build的localhost的匿名用户帐户将优先。 因此,monty将被视为匿名用户。 原因是匿名用户帐户比'monty'@'%'帐户具有更具体的主机列值,因此在用户表sorting顺序中更早。 (用户表格sorting在第6.2.4节“访问控制,第1阶段:连接validation”中讨论)
除非我误解这个,否则这对我来说似乎很愚蠢。
您可以通过编辑/etc/my.cnf来禁用所有的安全性:
[mysqld] skip-grant-tables
GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password';
将允许特定的用户从任何地方login。
这很糟糕,因为它消除了一些安全控制,即如果一个帐户被盗用。
还需要在configuration文件中禁用以下行:bind-address = 127.0.0.1
mysql> CREATE USER 'monty'@'192.168.%.%' IDENTIFIED BY 'some_pass'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'192.168.%.%'
安装和设置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
从服务器login到DB使用
mysql -u root -p
使用下面的语句创build数据库用户
grant all privileges on *.* to 'username'@'%' identified by 'password';
打开防火墙:
sudo ufw allow 3306
重新启动mysql
sudo service mysql restart