繁体   English   中英

Digital Ocean / Nginx / MySQL / MVC 部署

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM