使用 Cloud SQL 连接器进行连接

Cloud SQL 连接器是在连接到 Cloud SQL 实例时提供加密和基于 IAM 的授权的库。Cloud SQL 连接器无法提供 Cloud SQL 实例的网络路径(如果尚不存在)。

连接到 Cloud SQL 实例的其他方法包括使用数据库客户端Cloud SQL Auth 代理。如需详细了解如何连接到 Cloud SQL 实例,请参阅连接概览页面。

本页面介绍了以下 Cloud SQL 连接器:

  • Cloud SQL Java 连接器
  • Cloud SQL Python 连接器

准备工作

  • 启用 Cloud SQL API。

    启用 API

  • 创建一个 Cloud SQL 实例,包括配置默认用户。

    如需详细了解实例的创建,请参阅创建实例

    如需详细了解如何配置默认用户,请参阅配置默认用户帐号

  • 配置连接到 Cloud SQL 实例所需的角色和权限

设置

Java

Cloud SQL Java 连接器是在连接到 Cloud SQL 实例时提供基于 IAM 的授权和加密的库。它无法提供 Cloud SQL 实例的网络路径(如果尚不存在)。

安装

如需了解有关构建 JDBC 和 R2DBC 驱动程序并与 Cloud SQL Java 连接器搭配使用的说明,请参阅以下链接:

JDBC:使用 JDBC 连接到 SQL Server

R2DBC:使用 R2DBC 连接到 SQL Server

如需查看在应用的上下文中使用此库的示例,请参阅相关示例应用

身份验证

此库使用应用默认凭据对 Cloud SQL 服务器的连接进行身份验证。

如需在本地激活凭据,请使用以下 gcloud 命令:

    gcloud auth application-default login
    

连接 IntelliJ

如需将 IntelliJ 连接到您的 Cloud SQL 实例,您需要将库作为包含依赖项的 jar 添加到驱动程序设置页面上的其他文件部分中。例如,您可以在 Cloud SQL Java 连接器版本页面上找到预构建的 fat jar 来实现此目的。

Python

Cloud SQL Python 连接器是一个库,可与数据库驱动程序结合使用,以允许具有足够权限的用户连接到 Cloud SQL 数据库,而无需手动将 IP 列入许可名单或管理 SSL 证书。

目前支持的 SQL Server 驱动程序是 pytds

安装

如需安装最新版本,请按照这些说明操作。

身份验证

此库使用应用默认凭据对 Cloud SQL 服务器的连接进行身份验证。

如需在本地激活凭据,请使用以下 gcloud 命令:

    gcloud auth application-default login
    

用量

Java

如需了解 Web 应用环境下的此代码段,请查看 GitHub 上的 README

// Note: For Java users, the Cloud SQL JDBC Socket Factory can provide authenticated connections
// which is preferred to using the Cloud SQL Proxy with Unix sockets.
// See https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory for details.

// The configuration object specifies behaviors for the connection pool.
HikariConfig config = new HikariConfig();

// The following is equivalent to setting the config options below:
// jdbc:sqlserver://;user=<DB_USER>;password=<DB_PASS>;databaseName=<DB_NAME>;
// socketFactoryClass=com.google.cloud.sql.sqlserver.SocketFactory;
// socketFactoryConstructorArg=<INSTANCE_CONNECTION_NAME>

// See the link below for more info on building a JDBC URL for the Cloud SQL JDBC Socket Factory
// https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory#creating-the-jdbc-url

// Configure which instance and what database user to connect with.
config
    .setDataSourceClassName("com.microsoft.sqlserver.jdbc.SQLServerDataSource");
config.setUsername(DB_USER); // e.g. "root", "sqlserver"
config.setPassword(DB_PASS); // e.g. "my-password"
config.addDataSourceProperty("databaseName", DB_NAME);

config.addDataSourceProperty("socketFactoryClass",
    "com.google.cloud.sql.sqlserver.SocketFactory");
config.addDataSourceProperty("socketFactoryConstructorArg", INSTANCE_CONNECTION_NAME);

// ... Specify additional connection properties here.

// ...

// Initialize the connection pool using the configuration object.
DataSource pool = new HikariDataSource(config);

Python

如需了解使用该库的详细说明,请参阅如何使用连接器。查看 GitHub 上的示例连接测试代码。

# The Cloud SQL Python Connector can be used along with SQLAlchemy using the
# 'creator' argument to 'create_engine'. To use SQLAlchemy with pytds, include
# 'sqlalchemy-pytds` in your dependencies
def init_connection_engine() -> sqlalchemy.engine.Engine:
    def getconn() -> pytds.Connection:
        conn = connector.connect(
            os.environ["SQLSERVER_CONNECTION_NAME"],
            "pytds",
            user=os.environ["SQLSERVER_USER"],
            password=os.environ["SQLSERVER_PASS"],
            db=os.environ["SQLSERVER_DB"],
        )
        return conn

    engine = sqlalchemy.create_engine(
        "mssql+pytds://localhost",
        creator=getconn,
    )
    engine.dialect.description_encoding = None
    return engine

问题排查

驱动程序版本

确保使用最新版本的 Cloud SQL 连接器和数据库驱动程序,以避免不兼容。某些较低版本的驱动程序不受支持。

连接路径

Cloud SQL 连接器可提供连接授权,但不提供新的连接路径。例如,如需使用专用 IP 地址连接到 Cloud SQL 实例,您的应用必须已具有 VPC 访问权限。如需使用公共 IP 地址连接到 Cloud SQL 实例,您的应用必须在已获授权的网络中。

调试连接问题

如需连接问题方面的更多帮助,请参阅问题排查调试连接问题页面。

后续步骤