Laden...

Von Xamarin Android direkt auf MySql zugreifen?

Erstellt von schorge vor 5 Jahren Letzter Beitrag vor 5 Jahren 4.085 Views
S
schorge Themenstarter:in
129 Beiträge seit 2014
vor 5 Jahren
Von Xamarin Android direkt auf MySql zugreifen?

Moin,

ich habe eine Android XAMARIN Anwendung und möchte eine Verbindung zu einer bestehenden
MySql DB auf einem NAS aufbauen, später extern mittels VPN.

Jetzt aber zu meinem Problem:
Ich habe VB2017 15.7.5 mit einer einfachen Abfrage.

private bool mySqlConnection()
        {
            bool connect = false;

            string myConnectionStrings = "Server=192.168.178.***;Database=table;uid=root;Password=xxx";

            MySqlConnection connection = new MySqlConnection(myConnectionStrings);
            MySqlCommand command = connection.CreateCommand();
            command.CommandText = "SELECT * from artikel_table WHERE artikel_id='10'";
            MySqlDataReader Reader;

            try
            {
                connection.Open();
                Reader = command.ExecuteReader();

                while (Reader.Read())
                {                    

                    FindViewById<EditText>(Resource.Id.txtScanName).Text = Reader["artikel_id"].ToString();
                    
                }

                Reader.Close();
                connection.Close();

            }
            catch (Exception ex)
            {
                Toast.MakeText(ApplicationContext, "Fehler:" + ex.Message, ToastLength.Long).Show();
            }

            return connect;
        }

Im Android Emulator Oreo 8.0 API 26 kann ich in Chrome über phpMyAdmin auf die DB zugreifen,
nur in meiner Test-App kommt:

Fehlermeldung:
Authentication to host '192.168.178.' for user 'root' using method 'mysql_native_password' failed with message: Access denied for user 'root'@'192.168.178.' (using password: YES)"

genutzt wird Nuget Xamarin.MySql.Data

Neustarten und Rebuildings helfen leider auch nicht...

4.931 Beiträge seit 2008
vor 5 Jahren

Willst du von deinem Android-Smartphone auf das NAS zugreifen? Dieses befindet sich doch sicherlich im Firmennetz (also nur von deinem Windows-Rechner aus zugreifbar). Die IP "192.168.X.Y" ist ja schließlich ein lokales Netz.
Und von außen sollte man niemals direkt auf eine DB zugreifen, sondern z.B. einen entsprechenden WebService dafür nutzen.

S
schorge Themenstarter:in
129 Beiträge seit 2014
vor 5 Jahren

Ja, es reicht mir auch dies lokal zu erledigen. Ich komme auch lokal auf den NAS mit dem Chrome Browser im Android Emulator- nur die Verbindung zum MySql Server scheitert.

4.931 Beiträge seit 2008
vor 5 Jahren

Aber du kommst mit dem Browser auf deinem Android ja auch nicht auf diese Adresse, oder? Der Android-Emulator verwendet ja einfach das bestehende Netzwerk auf dem Host-Rechner.

Fehlen dir wirklich die Grundlagen der Netzwerktechnik?

S
schorge Themenstarter:in
129 Beiträge seit 2014
vor 5 Jahren

Doch, mit dem Browser habe ich Zugriff auf NAS und phpmyAdmin.
Sollte der Android-Emulator kein Zugriff haben, wäre der MySql Fehler
ein anderer.

T
2.219 Beiträge seit 2008
vor 5 Jahren

Ich halte schon dein Grundkonzept, die DB direkt per App zuverwenden, für falsch.
Die App sollte niemals direkt mit der DB verbinden, auch wenn dies nur "intern" ist oder später über VPN läuft.

Schalte einen Webservice vor deine DB und verbinde dich dann von deiner App aus über z.B. WebAPI/Webservices auf deine DB.

Dies hat neben Sicherheitsmaßnahmen auch die Vorteile, wie Caching und Zugangskontrollen.
Aktuell müsstest du deine DB nur wegen der App nach außen reichen, was das Risiko etwas falsch zu machen und die ganze DB nach außen zu legen, erhöht.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

S
schorge Themenstarter:in
129 Beiträge seit 2014
vor 5 Jahren

Ja, verstehe.
Da ich es früher oder später gänzlich umstellen muss auf einen WebService,
muss ich es gleich vernünftig realisieren.

Gibt es da ein verständliches HowTo für wie ich an meine MySql Daten über einen
WebService komme?

S
schorge Themenstarter:in
129 Beiträge seit 2014
vor 5 Jahren

Danke schon mal,

jetzt nur nochmal zum Verständnis:

Die WebAPI ist quasi die Brücke zwischen meiner App und der MySQL DB,
Der ASP.NET CORE WebAPI muss lokal auf einem Windows, einer VM laufen,
D.h.
App => HTTP Request/Response => WebAPI auf dem NAS => Insert/Update/Delete on MySQL

Bei mir fällt leider APS aus, habe kein x86 NAS,
was haltet ihr davon RESTful CRUD With Java and MySQL
bzw. welche alternative habe ich für ARM?

P
441 Beiträge seit 2014
vor 5 Jahren

Abgesehen von den Empfehlungen der anderen hier ist das Problem, dem di gegenüberstehst genau der gleiche grund, warum du eine Abstraktionsschicht zwischen App und DB verwenden solltest:

PHPMyAdmin ist eine solche Abstraktion. Als Webseite läuft das backend - dass mit der Datenbank kommuniziert - auf deiner NAS. Deswegen benötigt es auch Zugriff von 127.0.0.1, nicht von extern.
Dein benutzer scheint so angelegt zu sein, dass er nur von localhost zugreifen darf.

16.806 Beiträge seit 2008
vor 5 Jahren

Ob ASP.NET Core oder nicht ist egal. Das kann Java sein, das kann NodeJS sein - was auch immer.
ASP.NET Core jedenfalls läuft auch unter ARM und auch unter Linux - einfach mal die prerequisites anschauen.

Die API muss auch nicht auf der NAS laufen; steht nirgends. Sie kann aber, sofern es das System hergibt.

Jedenfalls solltest Du unter allen Umständen niemals von einer App direkt auf eine externe Datenbank zugreifen.
Das funktioniert in Android auch nur mit Glück; auf Windows Mobile zB ging das überhaupt nicht - wurde vom System und vom SDK unterbunden.

S
schorge Themenstarter:in
129 Beiträge seit 2014
vor 5 Jahren

Vielen Dank Euch!
Ich habe das ganze jetzt prinzipiell verstanden und werde mich nun mit der Umsetzung mit einer
NodeJS WepAPI auseinandersetzen.