使用 IAM 身份验证和 适用于 .NET 的 AWS 开发工具包 连接到数据库实例 - Amazon Relational Database Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 IAM 身份验证和 适用于 .NET 的 AWS 开发工具包 连接到数据库实例

您可以使用 适用于 .NET 的 AWS 开发工具包 连接到 Amazon RDS MySQL 或 PostgreSQL 数据库实例,如下所述。

以下是使用 IAM 身份验证连接到数据库实例的先决条件:

以下代码示例演示如何生成一个身份验证令牌,然后使用该令牌连接到数据库实例

要运行该代码示例,您需要使用 AWS 网站上提供的 适用于 .NET 的 AWS 开发工具包AWSSDK.COREAWSSDK.RDS 程序包是必需的。要连接到数据库实例,请使用用于数据库引擎的 .NET 数据库连接器,例如 MySqlConnector for MySQL 或 Npgsql for PostgreSQL。

根据需要修改以下变量的值:

  • server – 要访问的数据库实例的终端节点。

  • port – 用于连接到数据库实例的端口号

  • user – 要访问的数据库账户。

此代码连接到 MySQL 数据库实例。

using System; using System.Data; using MySql.Data; using MySql.Data.MySqlClient; using Amazon; namespace ubuntu { class Program { static void Main(string[] args) { var pwd = Amazon.RDS.Util.RDSAuthTokenGenerator.GenerateAuthToken(RegionEndpoint.USEast1, "mysqldb.123456789012.us-east-1.rds.amazonaws.com", 3306, "jane_doe"); // for debug only Console.Write("{0}\n", pwd); //this verifies the token is generated MySqlConnection conn = new MySqlConnection("server=mysqldb.123456789012.us-east-1.rds.amazonaws.com;user=jane_doe;database=mydB;port=3306;password={pwd};SslMode=Required;SslCa=../rds-ca-2019-root.pem"); conn.Open(); // Define a query MySqlCommand sampleCommand = new MySqlCommand("SHOW DATABASES;", conn); // Execute a query MySqlDataReader mysqlDataRdr = sampleCommand.ExecuteReader(); // Read all rows and output the first column in each row while (mysqlDataRdr.Read()) Console.WriteLine(mysqlDataRdr[0]); mysqlDataRdr.Close(); // Close connection conn.Close(); } } }

此代码连接到 PostgreSQL 数据库实例。

using System; using Npgsql; using Amazon.RDS.Util; namespace ConsoleApp1 { class Program { static void Main(string[] args) { var pwd = RDSAuthTokenGenerator.GenerateAuthToken("postgresqldb.123456789012.us-east-1.rds.amazonaws.com", 5432, "jane_doe"); // for debug only Console.Write("{0}\n", pwd); //this verifies the token is generated NpgsqlConnection conn = new NpgsqlConnection($"Server=postgresqldb.123456789012.us-east-1.rds.amazonaws.com;User Id=jane_doe;Password={pwd};Database=mydb;SSL Mode=Require;Trust Server Certificate=true;"); conn.Open(); // Define a query NpgsqlCommand cmd = new NpgsqlCommand("select count(*) FROM pg_user", conn); // Execute a query NpgsqlDataReader dr = cmd.ExecuteReader(); // Read all rows and output the first column in each row while (dr.Read()) Console.Write("{0}\n", dr[0]); // Close connection conn.Close(); } } }