sql >> Databasteknik >  >> RDS >> Mysql

Säkerhetsundantag med MySQL och Entity Framework på godaddy

Konstig en. GoDaddy delade ASP.NET-appar körs under Medium Trust, och skapande av perf-räknare kräver förmodligen fullt förtroende, men att skapa perf-räknare är inte det som misslyckas här. (och om det misslyckades, skulle det inte spridas eftersom undantag för skapande av perf countner sväljs av mySQL-klientkoden).

Istället misslyckas det att försöka få åtkomst till en strängresurs innan perfräknaren skapas. Felet beror på denna kodrad i Resources.Designer.cs i MySQL-klienten:

return ResourceManager.GetString("PerfMonCategoryName", resourceCulture)

Några saker att prova, i ökande svårighetsgrad:

  1. se till att du har MySQL-klientens DLL-filer i din app BIN-katalog och att du inte försöker ladda klient-DLL:erna från GoDaddys GAC. Lita aldrig på GoDaddy-levererade binärfiler om du kan undvika det!

  2. byt till EN-US-kultur så att klienten inte behöver gå på jakt efter en annan resurs-DLL och se om problemet försvinner.

  3. Bygg .NET-klienten från källkoden, istället för att kopiera DLL:er från en binär distribution till din app BIN-katalog. Detta kommer att göra problem som detta lättare att felsöka eftersom mySQL-koden inte kommer att vara en svart låda. Och, i ett nafs, låter dig ändra de problematiska resurshämtningsanropen (eller hårdkoda lokalen)! :-)

BTW, om du är frestad att ställa in "Use Performance Monitor=false" i din anslutningssträng för att försöka undvika problemet, bry dig inte. Den problematiska koden exekveras oavsett den inställningen:

    public PerformanceMonitor(MySqlConnection connection)
    {
        this.connection = connection;

        //// this line is where it bombs
        string categoryName = Resources.PerfMonCategoryName;

        //// this line is affected by connection string setting
        if (connection.Settings.UsePerformanceMonitor && procedureHardQueries == null)
        {
            try
            {
                procedureHardQueries = new PerformanceCounter(categoryName,
                                                              "HardProcedureQueries", false);
                procedureSoftQueries = new PerformanceCounter(categoryName,
                                                              "SoftProcedureQueries", false);
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
            }
        }
    }


  1. MS-Access Recordset och Class Module

  2. Vad är SQL Server Blocking?

  3. Python SQL – Hur man använder SQLite-, MySQL- och PostgreSQL-databaserna med Python

  4. mysql-fältnamn från variabel