MySQL では、ユーザー定義関数の誤用を防ぐためのさまざまな対策が講じられています。
UDF オブジェクトファイルは任意のディレクトリに配置できません。これらはサーバーのプラグインディレクトリに配置する必要があります。このディレクトリは、plugin_dir
システム変数の値から取得できます。
CREATE FUNCTION
または DROP FUNCTION
を使用するには、mysql
データベースの INSERT
権限または DELETE
権限をそれぞれ持っている必要があります。これが必要となるのは、これらのステートメントが mysql.func
テーブルに対して行の追加および削除を行うためです。
UDF には、メインの xxx()
関数に対応する xxx
シンボルのほかに、少なくとも 1 つのシンボルが定義してください。これらの補助シンボルは、xxx_init()
、xxx_deinit()
、xxx_reset()
、xxx_clear()
、および xxx_add()
関数に対応します。mysqld では、xxx
シンボルのみを持つ UDF をロードできるかどうかを制御する --allow-suspicious-udfs
オプションもサポートされています。デフォルトでは、このオプションはオフになっており、正当な UDF が含まれている共有オブジェクトファイル以外から関数がロードされることを防いでいます。xxx
シンボルのみが含まれていて、補助シンボルを含めるように再コンパイルできない古い UDF がある場合は、--allow-suspicious-udfs
オプションを指定する必要がある場合があります。それ以外の場合は、この機能を有効にしないようにしてください。