我一直在使用SQL Server,现在正在使用MySQL进行项目。使用SQL Server,如果他们知道主机,用户名和密码,我们的开发人员可以连接到本地计算机上的远程数据库。但是,使用MySQL,要让开发人员从本地计算机访问,我必须登录MySQL并执行:
GRANT ALL ON *.* to user@address IDENTIFIED BY 'password';
flush privileges;
其中address
是开发人员计算机的IP地址。当然,如果他们改变网络,我必须再次执行它。有没有办法允许所有远程连接,就像我在SQL Server中遇到的那样,或者出于某种原因这是个坏主意?我们还有用户名和密码..我显然有点困惑。
另外:这是一个开发数据库,只能从我们的内部网络访问。我理解为什么让每个人都能访问生产数据库是个坏主意。
答案 0 :(得分:135)
正如上面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';
阅读完整文档here.
以下是相关的参考资料:
以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帐户, 由[创建]创建的localhost的匿名用户帐户 当monty连接时,mysql_install_db优先 当地主持人。因此,monty将被视为匿名用户。 原因是匿名用户帐户有更多 特定主机列值比'monty'@'%'帐户因此而来 早期的用户表排序顺序。 (讨论用户表排序 在第6.2.4节“访问控制,第1阶段:连接验证”中。)
答案 1 :(得分:21)
您可以通过编辑/etc/my.cnf来禁用所有安全性:
[mysqld]
skip-grant-tables
答案 2 :(得分:11)
GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password';
允许特定用户从任何地方登录。
它很糟糕,因为它删除了一些安全控制,即如果帐户遭到入侵。
答案 3 :(得分:8)
安装并设置mysql以便从任何地方远程连接不要 使用mysql_secure_installation! (https://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html)
sudo apt-get install mysql-server
[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 root -p
grant all privileges on *.* to ‘username’@‘%’ identified by ‘password’;
sudo ufw allow 3306
sudo service mysql restart
答案 4 :(得分:2)
您还需要在配置文件中禁用以下行: bind-address = 127.0.0.1
答案 5 :(得分:1)
mysql> CREATE USER 'monty'@'192.168.%.%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'192.168.%.%'
答案 6 :(得分: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