C# wykonanie procedury na bazie MySql MariaDB

0

Witam,
Mam problem z wykonaniem procedury na bazie MySql MariaDB. W innej metodzie mam użyty SELECT i bez problemu pobiera dane z bazy, ale z wykonaniem procedury jest problem. Bilioteka jaką używam to:

using MySqlConnector;

Dodam, że użytkownik ma pełne uprawnienia.

Błąd komunikatu to: MySqlConnector.MySqlException: 'SELECT command denied to user 'user1'@'tu jest ip' for table 'proc''

Błąd pojawia się w linijce

cmd.ExecuteNonQuery();
private void LogowanieMariaDB()
        {
            try
            {
                using (MySqlConnection con = new MySqlConnection(sql))
                {
                    try
                    {
                        using (MySqlCommand cmd = con.CreateCommand())
                        {
                            DateTime dataiczas = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                            
                            cmd.CommandType = CommandType.StoredProcedure;                            
                           
                            cmd.Parameters.Add(new MySqlParameter("p_OP", "logowanie")); 
                            cmd.Parameters["p_A_OPERACJA"].Direction = ParameterDirection.Input;
                            cmd.Parameters.Add(new MySqlParameter("p_OPIS", "Logowanie użytkownika do systemu."));
                            cmd.Parameters["p_A_OPIS"].Direction = ParameterDirection.Input;
                            cmd.Parameters.Add(new MySqlParameter("p_DATA", dataiczas)); 
                            cmd.Parameters["p_A_DATAICZAS"].Direction = ParameterDirection.Input;
                            cmd.Parameters.Add(new MySqlParameter("p_IDENT", txtNazwa.Text.ToString()));
                            cmd.Parameters["p_U_IDENTYFIKATOR"].Direction = ParameterDirection.Input;
                            cmd.CommandText = "ZALOGUJ";
                            con.Open();
                            cmd.ExecuteNonQuery();
                        }

                        con.Close();

                    }
                    catch (Exception ex)
                    {
                        DisplayAlert("Błąd", "Błąd wykonania procedury " + ex.Message, "OK");
                    }
                }
            }
            catch (Exception ex)
            {
                DisplayAlert("Błąd", "Błąd połączenia z bazą danych " + ex.Message, "OK");
            }
        }        
0

Poprawiony kod dalej z tym samym błędem:

private void LogowanieMariaDB()
        {
            try
            {
                using (MySqlConnection con = new MySqlConnection(sql))
                {
                    try
                    {
                        using (MySqlCommand cmd = con.CreateCommand())
                        {
                            DateTime dataiczas = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));

                            cmd.CommandType = CommandType.StoredProcedure;                            

                            cmd.Parameters.Add(new MySqlParameter("p_OP", "logowanie")); 
                            cmd.Parameters["p_OP"].Direction = ParameterDirection.Input;
                            cmd.Parameters.Add(new MySqlParameter("p_OPIS", "Logowanie użytkownika do systemu."));
                            cmd.Parameters["p_OPIS"].Direction = ParameterDirection.Input;
                            cmd.Parameters.Add(new MySqlParameter("p_DATA", dataiczas)); 
                            cmd.Parameters["p_DATA"].Direction = ParameterDirection.Input;
                            cmd.Parameters.Add(new MySqlParameter("p_IDENT", txtNazwa.Text.ToString()));
                            cmd.Parameters["p_IDENT"].Direction = ParameterDirection.Input;
                            cmd.CommandText = "ZALOGUJ";
                            con.Open();
                            cmd.ExecuteNonQuery();
                        }

                        con.Close();

                    }
                    catch (Exception ex)
                    {
                        DisplayAlert("Błąd", "Błąd wykonania procedury " + ex.Message, "OK");
                    }
                }
            }
            catch (Exception ex)
            {
                DisplayAlert("Błąd", "Błąd połączenia z bazą danych " + ex.Message, "OK");
            }
        } 
2

User, którym się logujesz do tej bazy nie ma uprawnień do wykonania tego zapytania.

0

Poza tym miejscem, jak poniżej na screenie w phpMyAdmin,, jeszcze gdzieś ustawia się uprawnienia ?

screenshot-20211119235357.png

0

Nie korzystam z MySQL, w tym nie pomogę. Upewnij się, że tego użytkownika, z tymi uprawnieniami masz w new MySqlConnection(sql). Pamiętaj, że programy nie mają kaprysów, działają tak jak im się napiszę, więc albo nie ma ten user uprawnień, albo się logujesz do bazy innym.

#EDIT
Upewnij się, że tabela proc istnieje i nie masz tam literówki. Z tego co piszą na Stackoverflow, to MySQL lubi pokazywać błąd z brakiem dostępu tam gdzie nie ma tabeli.

0

Ja zawsze na bazach MSSQL pracowałem i nie było problemów takich jak tu. Tabela proc jest to tabela systemowa w MySql tak wyczytałem i przechowuje właśnie procedury. Błąd jak dla mnie także mówi, że tu chodzi o uprawnienia, ale sprawdzałem i ten użytkownik ma pełne uprawnienia włącznie z uprawnieniami do wykonywania procedur. Wolę MSSQL, no ale niestety muszę ten problem jakoś rozwiązać bo musi być w tym przypadku użyta baza MariaDB

Połączenie jest zewnętrzne z tą bazą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1