[英]Access denied when connecting to an AWS MySql database from an ASP.NET application
[英]Connecting asp.net web api to aws rds sql server database
我正在嘗試將asp.net中制作的web api連接到aws rds提供的sql服務器數據庫。 我以前從未使用過 aws,所以我不確定我是否遺漏了什么。 我曾嘗試這樣做,但是當我添加遷移並嘗試更新數據庫(使用 EF 核心)時,我收到以下消息:
A. 與 SQL 服務器建立連接時發生網絡相關或特定於實例的錯誤。 服務器未找到或無法訪問。 驗證實例名稱是否正確以及 SQL 服務器是否配置為允許遠程連接。 (提供商:命名管道提供商,錯誤:40 - 無法打開與 SQL 服務器的連接)
我的 API 中有以下代碼:
上下文 class:
public class TestContext : DbContext
{
public virtual DbSet<Fruit> Fruits { get; set; }
public TestContext(DbContextOptions<TestContext> options) : base(options) { }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("server=<nameofserver>;user=<username>;password=<password>;database=<nameofdatabase>;"); // there i put data from my database hosted on aws
}
}
在 Program.cs 中:
builder.Services.AddDbContext<TestContext>(options =>
options.UseSqlServer("server=<nameofserver>;user=<username>;password=<password>;database=<nameofdatabase>;"))// there i put data from my database hosted on aws1;
我知道我應該將連接字符串放在 appsettings.json 中,但我相信現在情況並非如此。 為什么不在數據庫中創建表? 我應該在 aws 網站上啟用/做某事嗎? 或者問題出在代碼中? 我該如何解決?
目前,您會發現 .NET 的AWS SDK的類似用例。
當前示例向您展示如何使用AWS SDK for .NET (v3)創建一個 REST 服務,讓您可以執行以下操作:
https://docs.aws.amazon.com/code-library/latest/ug/aurora_example_cross_RDSDataTracker_section.html
我相信這個例子會在某個時候移植到 SQL 服務器。
要連接到 SQL 服務器,您需要提供自己的連接詳細信息(與示例中討論的需要其他憑據的Amazon Aurora Serverless數據庫不同)。 另請注意,SQL 服務器沒有像 Amazon Aurora Serverless 那樣的服務客戶端。
另外 - 確保正確設置入站規則。
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html
設置入站規則、設置用戶密碼等后,以下 C# 應該可以使用。
static void Main(string[] args)
{
try
{
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "<your_server.database.windows.net>";
builder.UserID = "<your_username>";
builder.Password = "<your_password>";
builder.InitialCatalog = "<your_database>";
using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
{
Console.WriteLine("\nQuery data example:");
Console.WriteLine("=========================================\n");
connection.Open();
String sql = "SELECT name, collation_name FROM sys.databases";
using (SqlCommand command = new SqlCommand(sql, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine("{0} {1}", reader.GetString(0), reader.GetString(1));
}
}
}
}
}
catch (SqlException e)
{
Console.WriteLine(e.ToString());
}
Console.WriteLine("\nDone. Press enter.");
Console.ReadLine();
}
}
它可能與您的連接字符串有任何關系,也可能沒有任何關系,但您需要確保的第一件事是運行您的 api/網站的服務器有權與您的 rds 實例通信——默認情況下它沒有; 在執行任何其他操作之前,您將需要一個專門允許它的安全組(並且不要不小心將其公開 - 您的 rds 實例會被試圖猜測密碼的黑客攻擊)。
最簡單的檢查方法是啟動 SSMS 或其他此類工具,看看是否可以從運行代碼的機器連接到 RDS - 如果不能 - 你在代碼中做的任何事情都無法解決這個問題。
一旦您可以成功地從 SSMS 連接到 RDS,如果連接字符串仍然有問題,您可以嘗試使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.