我有一个dotnet core 2.0应用程序运行在Google App Engine Flexible环境中。在同一个谷歌项目中,我有一个云SQL - MySQL数据库。在“云SQL实例详细信息”页面的“授权”选项卡下,它表示
此项目中的应用:全部已授权。
但是,除非将0.0.0.0/0
路由添加到授权网络部分,否则我无法从应用程序访问数据库。
在不向世界开放数据库的情况下,我可以做些什么来授予我的应用程序db访问权限?
Jeffery Renne的更新2018-05-21(接受答案)
App Engine现在支持使用端口号而不是unix域套接字连接到云SQL实例。所以现在,您可以在app.yaml
中添加这样的内容:
beta_settings:
cloud_sql_instances: "your-project-id:us-central1:instance-name=tcp:5432"
并在appsettings.json的连接字符串中指定Host=cloudsql
:
"ConnectionString": "Uid=aspnetuser;Pwd=;Host=cloudsql;Database=visitors"
在上面的示例中,端口是5432,这是PostgreSQL数据库的默认端口。对于MySQL数据库,请使用端口3306。
可以在此处找到包含部署到App Engine说明的完整示例:
https://github.com/GoogleCloudPlatform/dotnet-docs-samples/tree/master/appengine/flexible/CloudSql
虽然“此项目中的应用程序:全部授权”似乎表明您可以开箱即用地将 App Engine 应用程序与 Cloud SQL 结合使用,但这并存在限制。
首先,您的云SQL需要是第二代实例,其次,有具体的说明取决于您使用的语言和应用引擎类型(标准或灵活)。
如果你的情况符合所有的要求,它应该工作。
对于您的特定用例,您需要。Net说明,它确实说您需要添加一个具有0.0.0.0/0访问权限的网络和一个用户帐户。用户认证SSL应该提供您需要的安全性。
理想的解决方案是使用unix域套接字从应用程序引擎实例连接到云SQL。其他编程语言如Python和PHP就是这样做的。不幸的是,MySQL连接器不适用于域套接字。我看不出为什么不能,但事实并非如此。我希望他们尽快解决这个问题。
如中所述https://cloud.google.com/appengine/kb/#static-ip,
请注意,使用静态IP地址过滤并不被视为安全有效的保护手段。例如,攻击者可以设置一个恶意应用程序引擎应用程序,该应用程序可能与您的应用程序共享相同的IP地址范围。相反,我们建议您使用OAuth和Certs进行深度防御。
如果证书不足以保护您的应用程序,那么我今天看到的唯一剩下的选项就是构建一个运行云SQL代理的自定义运行时。代理可以将本地ip端口号转发到unix域套接字。如果您已经构建了一两个docker映像,那么它还不错。
随着情况的改善,我会更新这个答案。
更新2018-05-21
App Engine现在支持使用端口号而不是unix域套接字连接到云SQL实例。所以现在,您可以在app.yaml
中添加这样的内容:
beta_settings:
cloud_sql_instances: "your-project-id:us-central1:instance-name=tcp:5432"
并在appsettings.json的连接字符串中指定Host=cloudsql
:
"ConnectionString": "Uid=aspnetuser;Pwd=;Host=cloudsql;Database=visitors"
在上面的示例中,端口是5432,这是PostgreSQL数据库的默认端口。对于MySQL数据库,请使用端口3306。
可以在此处找到包含部署到App Engine说明的完整示例:
https://github.com/GoogleCloudPlatform/dotnet-docs-samples/tree/master/appengine/flexible/CloudSql
我使用启动了mongo,但是我得到了如下所示的错误消息。 我试图使用,但得到如下所示的错误消息。 但是当我尝试时,我可以在集合中显示用户,而不会出现任何错误消息。
一个ASP.NET web项目加载了解决方案,但我得到了这个错误
嗨,我知道有几个线程对此,但没有一个解决方案似乎对我有效。 我有一个ASP.NET网站项目,我正试图加载并在Visual Studio中发布该项目。然而,当我加载项目时,我得到了错误: 到目前为止我所尝试的: 获得C://Windows/system32/inetsrv/config的所有权 在我的project_name.csproj文件中设置 返回到旧的team foundation serv
到目前为止,我正在学习驱动器API并阅读了所有这些文档。我只是想打一个经过身份验证的电话列出驱动器中的文件。 这是一个内部应用程序,不需要用户授权,我只需要访问我们公司的驱动器。因此,“服务账户”听起来是正确的。 这是我目前所做的 在Google Developer Console中创建了一个应用程序 同时启用Drive API和Drive SDK 下载并存储了我的p12密钥 在Google Ap
我无法访问节点中的帖子数据。js应用。我也在用express。 app.js: HTML:
我正在使用DBEAVER3.8.0,并试图建立到本地PostgreSQL数据库的一般连接。 若要查看所有数据库,请选中“显示非默认数据库”复选框。当我试图访问我的一个数据库的架构时,我得到了错误