The MariaDB server imposes a number of limitations on user-defined functions
for security purposes.

* The INSERT privilege for the mysql database is required to run CREATE
FUNCTION, as a record will be added to the mysql.func-table.
* The DELETE privilege for the mysql database is required to run DROP FUNCTION
as the corresponding record will be removed from the mysql.func-table.
* UDF object files can only be placed in the plugin directory, as specified by
the value of the plugin_dir system variable.
* At least one symbol, beyond the required x() - corresponding to an SQL
function X()) - is required. These can be x_init(), x_deinit(), xxx_reset(),
x_clear() and x_add() functions (see Creating User-defined Functions). The
allow-suspicious-udfs mysqld option (by default unset) provides a workaround,
permitting only one symbol to be used. This is not recommended, as it opens
the possibility of loading shared objects that are not legitimate user-defined
functions.

URL: https://mariadb.com/kb/en/user-defined-functions-security/