我的系绳结束,数小时的变化......
我正在尝试访问在 EC2 实例上运行的已安装 MySQL。大量搜索(这似乎最接近我的问题Connect to mysql on Amazon EC2 from a remote server),我显然错过了一些愚蠢或误解的东西。
EC2 Ubuntu,mysqld 运行良好,本地 Web/应用程序服务器工作正常,所有连接。我可以从本地mysql。我需要从外部访问这台开发机器,因为使用 Iron.io 需要从外部访问数据库。
我有
我试过了
(之后总是重新启动服务器)
没有任何效果,测试总是
$ mysql --host=54.xxx --port=3306 --user=myuser -p 输入密码:ERROR 1045 (28000): Access denied for user 'myuser'@'54.xxx' (using password: YES)
然而我注意到
netstat -a 显示不同的端口和套接字监听!?
下面的 netstat 中的侦听端口不是 3306 但我已经从外部 telneted 到该端口,它显示 mysql IS 正在侦听
谁能建议我错过的任何步骤?
db 特权的摘录,my.cnf 下面
# user_privileges
# e.g. SELECT * from information_schema.user_privileges;
+--------------------------------+---------------+-------------------------+--------------+
| GRANTEE | TABLE_CATALOG | PRIVILEGE_TYPE | q1 |
+--------------------------------+---------------+-------------------------+--------------+
| 'root'@'localhost' | def | SELECT | YES |
...
| 'myuser'@'%' | def | SELECT | NO |
| 'myuser'@'%' | def | INSERT | NO |
| 'myuser'@'%' | def | UPDATE | NO |
#
]$ netstat -a | grep 'mysql'
tcp 0 0 *:mysql *:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 61212 /var/run/mysqld/mysqld.sock
$ telnet 54.x.x.x 3306
Trying 54.x.x.x...
Connected to ec2-54-x-x-x.us-west-2.compute.amazonaws.com.
Escape character is '^]'.
[
5.5.44-0ubuntu0.14.04.1+c<>d^+W?1*!e\{wdp&hZmysql_native_password
# my.cnf
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
#skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = localhost
# donts seem to work
bind-address = 0.0.0.0
# does not work
# ec2 external ip
#bind-address = 54.x.x.x
# ec2 internal ip
#bind-address = 172.x.x.x
Run Code Online (Sandbox Code Playgroud)
我发现的最好的工具是 sqlyog,(也许还有 mysql 工作台),它实际上会在连接失败时告诉您来自的主机名。
我喜欢它的原因是它保持安全性,显示类似于用户“fred123@hdm38.newyork.comcastbusiness.net”拒绝访问的内容。请注意,该主机名是我刚刚编造的,但它很重要,无论您输入的是什么。否则是通配符时间,我不会这样做。你可能会选择。
这很重要,因为该主机名(hdm38.newyork.comcastbusiness.net)是我在 mysql 期间使用的主机名create user,而不是使用像 % 这样的通配符
我让上面的连接失败,但我注意到上面的主机名是什么。你会在下面看到它。
1) 您的远程用户正在通过使用适当user,host条目创建的帐户进行连接(查看来自 的输出select user,host from mysql.user order by 1,2)
CREATE USER 'santa'@'hdm38.newyork.comcastbusiness.net' IDENTIFIED BY 'mypassword';
Run Code Online (Sandbox Code Playgroud)
使用上面的命令,我们现在有了一个有机会进入的新用户。不能做任何事情。无法更改为 db。基本上他们可以做这样的事情select now();
2)您曾grants与flush privileges(至少是前者)一起表演
GRANT ALL PRIVILEGES ON mydb123.* TO 'santa'@'hdm38.newyork.comcastbusiness.net';
Run Code Online (Sandbox Code Playgroud)
我们使用上述命令的用户现在可以在 mydb123 数据库/模式中执行任何操作。在手册中探索上面的 Grant 命令,以微调您创建的用户对最低限度的访问。
如果您不熟悉 mysql 安全,请在WITH GRANT OPTION研究之前不要包含。
有些人会说上面的主机名是第 1 步和第 2 步的“%”。这意味着圣诞老人可以从任何主机连接。这是你的选择。开始紧张,一旦你到达某个地方并对其进行了研究,就放松。
3) 您已修改my.cnf并更改bind-address为127.0.0.1或localhost,而支持0.0.0.0
如果 bind-address 不是0.0.0.0,则您仅使用 ssh 连接
4) 你已经修改了my.cnf并且有一个 rem'd out line #skip-networking。即使您必须创建该行只是为了将其清除,也请这样做。
3/4 更改需要重启 mysql 守护进程
5)防火墙问题。因此,对于 EC2,您需要您AWS Security Group的实例处于活动状态以包括开放端口 3306
| 归档时间: |
|
| 查看次数: |
7392 次 |
| 最近记录: |