[英]Digital Ocean / Nginx / MySQL / MVC deployment
我正在尝试使用 Nginx、MySQL 和 dotnet-core 通过 Digital Ocean 小滴部署和托管网站。 我能够将整个项目转移到 Digital Ocean 小滴,但现在我在更新数据库时遇到问题,并收到“使用连接到服务器 'localhost' 上的数据库'' 时发生错误”&'用户拒绝访问'根'@'本地主机'。 我相信我没有正确转移用户机密,但老实说我不确定。 我通过 GIT 传输了整个项目,因此我必须使用命令 'dotnet user-secrets set "SecretKey" "SecretValue"' 手动添加所有连接字符串。 我已经在我的数字海洋液滴上安装了 dotnet-core、MySQL、Nginx 和所有好东西。
提前致谢!!
'Access denied for user 'root'@'localhost'
- 我在 Linux VM 上遇到了同样的问题。 在我的情况下,数据库用户在连接到数据库时访问被拒绝。
检查用于连接到Mysql
数据库的数据库用户帐户是否设置了正确的访问权限。 从 shell 连接到 mysql 数据库并运行以下查询:
select user, host from mysql.user;
输出将是这样的:
+----------+-----------+
| user | host |
+----------+-----------+
| cron | % |
| custom | % |
| abc | % |
| slave | % |
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| cron | localhost |
| abcuser | localhost |
| root | localhost |
| | aaaaabox |
| root | aaaaabox |
+----------+-----------+
如您所见, root
拥有对localhost, ::1, 127.0.0.1 的访问权限。 这些都是本地域。
在您的情况下,如果缺少其中任何一个,请使用以下命令添加缺少的:
GRANT ALL PRIVILEGES ON DBNAME.* TO 'root'@'localhost';
其中DBNAME
是数据库的名称, root
是数据库用户名, localhost
是域。
请注意:您不应该使用root
帐户连接到 mysql 数据库。 您可以创建一个单独的帐户,该帐户的访问权限仅限于应用程序数据库。
以下是创建新数据库用户帐户并从应用程序连接到数据库的方法:
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'appuserpass';
GRANT ALL PRIVILEGES ON DBNAME.* TO 'appuser'@'localhost';
GRANT ALL ON DBNAME.* TO 'appuser'@'localhost' IDENTIFIED BY 'appuserpass';
GRANT ALL ON DBNAME.* TO 'appuser'@'127.0.0.1' IDENTIFIED BY 'appuserpass';
GRANT ALL ON DBNAME.* TO 'appuser'@'::1' IDENTIFIED BY 'appuserpass';
这是连接字符串:
"ConnectionStrings": {
"DefaultConnection": "server=127.0.0.1;user=appuser;password=appuserpass;port=3306;database=DBNAME;"
},
更新:
如果您尝试从机器外部连接到 MySql 数据库,那么您需要确保:
完成调试后不要忘记关闭远程访问。 否则,这将产生额外的安全隐患。
为了解决我的问题,我采取了稍微不同的方法。
我正在使用 F1(免费层)Azure 应用服务来实际托管该网站。 然而,我仍然会使用我的 Digital Ocean 小滴来托管我的数据库。 然后我将使用 Cloudflare 将我的域名服务器指向。 那就是我可以将我的个人域用于网站,而不是使用 Azure App 服务域。 我知道这并不是真正的“答案”,但它提供了一条更简单的途径来实现我的目标。 谢谢大家的指点!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.