sql >> Databasteknik >  >> RDS >> Mysql

UDF-resultatfel

Tack Roland.

Så svaret på min fråga är "AppArmor".

Från Wikipedia:

AppArmor låter systemadministratören associera med varje program en säkerhetsprofil som begränsar det programmets möjligheter. Den kompletterar den traditionella Unix-modellen för diskretionär åtkomstkontroll (DAC) genom att tillhandahålla obligatorisk åtkomstkontroll (MAC).

Sedan Ubuntu Hardy innehåller MySQL 5.0-serverpaketet också en AppArmor-profilfil (/etc/apparmor.d/usr.sbin.mysqld) som begränsar MySQL-serverfunktionerna, som att anropa en UDF för att utföra kommandon.

Så för att låta MySQL köra Linux-kommandon bör jag ändra säkerhetsnivån för MySql inuti AppArmor.

[[email protected] ~]# aa-complain /usr/sbin/mysqld 

För att ta en titt på AppArmors status:

 [[email protected] ~]# aa-status 

Med den här konfigurationen kan jag exkludera sys_eval och sys_exec. Men det är fortfarande begränsat till mysql-katalogen. Så jag kan inte skapa en fil eller köra ett skript från någon katalog.

Så lösningen är att lägga till behörigheter till apparmor för mysql att komma åt de nya datakatalogerna.

sudo vi /etc/apparmor.d/usr.sbin.mysqld

Lägg till:

/newdir/ r,
/newdir/** rwk,

Starta om servrarna:

sudo /etc/init.d/apparmor restart
sudo /etc/init.d/mysql restart

Om det fortfarande inte fungerar, kontrollera nix-behörigheterna för att vara säker på att mysql är ägare och grupp för den nya katalogen rekursivt.

chown -R mysql:mysql “new datadir path”

Jag hoppas att det hjälper någon.

Abid



  1. Anropa en medlemsfunktion rowCount() på ett icke-objekt

  2. Visa meddelande i lagrad procedur

  3. Hur infogar man en fil i MySQL-databasen?

  4. Hur lagrar jag wxImage i databasen med C++?