sql >> Database >  >> RDS >> Mysql

Problemen met MySQL-definer oplossen

In dit artikel wordt beschreven hoe u problemen kunt oplossen die kunnen optreden wanneer de DEFINER attribuut wordt gebruikt met MySQL-opgeslagen objecten (weergaven, triggers, functies en opgeslagen procedures).

Probleem

U kunt problemen ondervinden bij het bekijken of uitvoeren van MySQL-opgeslagen objecten (weergaven, triggers, functies en opgeslagen procedures). U kunt bijvoorbeeld de volgende foutmelding krijgen in phpMyAdmin:

Error in processing request: No routine with name 'example' found in database 'example_db'. You might be lacking the necessary privileges to edit this routine.

Als alternatief kunt u schijnbaar willekeurige fouten ervaren tijdens de werking van de website, of een verlies van databasefunctionaliteit.

Oorzaak

De DEFINER attribuut wordt gebruikt om een ​​MySQL-gebruikersaccount op te geven dat toegang heeft tot een bepaald opgeslagen object. Er kunnen echter problemen optreden wanneer het MySQL-gebruikersaccount in een DEFINER kenmerk komt niet overeen met de momenteel ingelogde MySQL-gebruiker. Dit kan bijvoorbeeld gebeuren bij gebruik van cPanel's phpMyAdmin, die altijd inlogt als de primaire accountgebruiker (cPanel) en niet als een door de gebruiker gedefinieerde databasegebruiker.

Evenzo kan dit probleem optreden na een sitemigratie als de DEFINER attributen in de database worden niet bijgewerkt met de databasegebruikers van de nieuwe hostingomgeving.

Resolutie

Om dit probleem op te lossen, kunt u proberen u aan te melden bij de database als de databasegebruiker waarnaar wordt verwezen in de DEFINER attributen. (Om de juiste databasegebruiker te bepalen, moet u mogelijk de database dumpen en de DEFINER onderzoeken attributen.) Er zijn verschillende manieren waarop u kunt inloggen als verschillende databasegebruikers:

Methode #1:Gebruik een MySQL-clienttoepassing

U kunt een MySQL-clienttoepassing, zoals MySQL Workbench, gebruiken om u als de juiste databasegebruiker bij de database aan te melden. U kunt dan opgeslagen objecten met de juiste identiteit bewerken en uitvoeren. Raadpleeg dit artikel voor informatie over het gebruik van een MySQL-clienttoepassing om verbinding te maken met uw databases.

Methode #2:gebruik het 'mysql'-opdrachtregelprogramma

Als alternatief kunt u de mysql . gebruiken opdrachtregelprogramma om in te loggen op de database als de juiste databasegebruiker. U kunt dan opgeslagen objecten met de juiste identiteit bewerken en uitvoeren. Voor informatie over het gebruik van de mysql commandoregelprogramma, zie dit artikel.

Methode #3:gebruik een aangepaste installatie van phpMyAdmin

Als u geen MySQL-clienttoepassing of de opdrachtregel wilt gebruiken, kunt u een zelfstandige phpMyAdmin-installatie op uw hostingaccount maken. Met deze aangepaste installatie kunt u zich aanmelden bij de database als de juiste databasegebruiker in plaats van als de primaire accountgebruiker (cPanel). Raadpleeg dit artikel voor informatie over het maken van een aangepaste phpMyAdmin-installatie.

Soms kunt u niet inloggen op een database als de databasegebruiker waarnaar wordt verwezen in de DEFINER attributen. Een site die is gemigreerd van een andere hostingprovider kan bijvoorbeeld andere MySQL-naamgevingsconventies hebben en het kan onmogelijk zijn om een ​​databasegebruiker met de juiste naam aan te maken. In dit geval moet u het volgende doen:

  1. Dump de hele database naar een bestand. Raadpleeg dit artikel voor informatie over hoe u dit kunt doen.
  2. Gebruik de teksteditor van uw voorkeur om de DEFINER . handmatig bij te werken attributen om te verwijzen naar een databasegebruiker die u beheert.
  3. Importeer de gewijzigde database naar uw account. Raadpleeg dit artikel voor informatie over hoe u dit kunt doen.
  4. Test de nieuwe database. U zou nu opgeslagen objecten met de juiste identiteit moeten kunnen bewerken en uitvoeren.

Meer informatie

Ga voor meer informatie over definities naar https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.html.


  1. PostgreSQL schakelt meer uitvoer uit

  2. Hoe accenten en alle tekens <> a..z in sql-server te verwijderen?

  3. Zeer beschikbare PostgreSQL implementeren met Single Endpoint voor WordPress

  4. Hoe een gezouten wachtwoord uit de database en auth-gebruiker intrekken?