我试过这些:
Data Source=/cloudsql/*****:asia-southeast2:*****;Initial Catalog=*****;Integrated Security=False;User ID=sqlserver;Password=MyPassword0!;MultipleActiveResultSets=True
那/cloudsql/*****:asia-southeast2:*****
是这里描述的我的实例连接名称。
我也尝试过这样的公共IP:
Data Source=***.***.***.***;Initial Catalog=*****;Integrated Security=False;User ID=sqlserver;Password=MyPassword0!;MultipleActiveResultSets=True
使用 IP 地址我的 SQL 实例公共 IP,但它不起作用。
我已经从 Cloud Run 启用了 sql 实例连接:
如何使用 EF Core 修复连接字符串?
这是我得到的错误:
Microsoft.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:SQL 网络接口,错误:25 - 连接字符串无效)
您正在尝试将 Cloud SQL SQL 服务器与 Cloud Run 结合使用。但是,如果您查看文档,则不支持此连接。
实际上支持连接,但 Cloud Run 服务打开一个 Unix 套接字来连接 SQL Server 实例。并且没有兼容 Unix Socket 的 SQL Server 客户端,因此您无法访问它。
为了解决您的问题,我建议您使用Private IP
此页面的部分。您也可以使用公共 IP 实现相同的配置(不要使用无服务器 VPC 连接器并转到您的 Cloud SQL 实例,并授权网络 0.0.0.0/0 访问您的实例),但是,因为您需要广泛开放授权网络,出于安全原因,我不建议您使用此选项。
编辑 1
因为我的英语不好,让我多解释一下!!
最好的方法是遵循文档页面:将 Cloud SQL 私有 IP 连接到您的 VPC,在 Cloud Run 中使用无服务器 VPC 连接器,并且在您的代码中,您可以使用连接字符串中的私有 IP 来访问数据库。
但是,您也可以使用我不推荐的公共 IP(请参阅下面的原因),至少在首次使用时是这样。事实上,您可以在代码中使用公共 IP 而不是私有 IP。由于您使用公共 IP,因此您不再需要 Cloud Run 服务上的无服务器 VPC 连接器(您不使用 VPC,而是使用互联网来访问互联网)。
但是,因为您使用互联网并且 Cloud Run 是一项多客户共享服务,所以您不知道您的源 IP。在 Cloud SQL 上,您需要允许授权网络部分中的任何 IP(0.0.0.0/0)访问您的数据库,这不是一个非常安全的配置。
或者,您可以在 Cloud Run 上创建更复杂的配置以安全地使用 Cloud SQL 公共 IP(但它变得非常复杂)。让我深入研究一下。
之前说过Cloud Run是共享服务,发起外呼(比如连接数据库)的时候不管理源IP。这是真的,但你可以控制它!
现在,您已在 Cloud Run 服务上定义了一个公共静态 IP。您只能在您的 Cloud SQL 授权网络上授予它,以提高安全性并且不要让任何人访问您的 Cloud SQL 实例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句