1

「mysqludf_sys」をインストールしようとしています。しかし、私はこのエラーが発生しました:

ERROR 1126 (HY000) at line 29: Can't open shared library 'lib_mysqludf_sys.so' (errno: 0 /usr/lib/mysql/plugin/lib_mysqludf_sys.so: cannot open shared object file: No such file or directory)
ERROR: unable to install the UDF

だから、私は Makefile の次の変更でそれを解決しようとしました:

LIBDIR=/usr/lib to LIBDIR=/usr/lib/mysql/plugin

また、gcc に -fPIC オプションがあることを確認してください。

gcc -fPIC -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o $(LIBDIR)/lib_mysqludf_sys.so

しかし、sys_eval をテストすると、次のようになります。

mysql> SELECT sys_eval('id');
+----------------+
| sys_eval('id') |
+----------------+
|                |
+----------------+
1 row in set (0.02 sec)

私は取得する必要があります:

mysql> SELECT sys_eval('id');
+-------------------------------------------------+
| sys_eval('id')                                  |
+-------------------------------------------------+
| uid=105(mysql) gid=108(mysql) groups=108(mysql) |
+-------------------------------------------------+
1 row in set (0.01 sec)

「sys_exec」もテストしてファイルを作成しましたが、結果はありません

では、これらの機能を正しく実行するにはどうすればよいですか? よろしく

4

2 に答える 2

3

ありがとうローランド。

したがって、私の質問に対する答えは「AppArmor」です。

ウィキペディアから:

AppArmor を使用すると、システム管理者は各プログラムに、そのプログラムの機能を制限するセキュリティ プロファイルを関連付けることができます。必須アクセス制御 (MAC) を提供することで、従来の Unix 随意アクセス制御 (DAC) モデルを補完します。

Ubuntu Hardy 以降、MySQL 5.0 サーバー パッケージには、UDF を呼び出してコマンドを実行するなど、MySQL サーバーの機能を制限する AppArmor プロファイル ファイル (/etc/apparmor.d/usr.sbin.mysqld) も含まれています。

したがって、MySQL が Linux コマンドを実行できるようにするには、AppArmor 内の MySql のセキュリティ レベルを変更する必要があります。

[root@xxx ~]# aa-complain /usr/sbin/mysqld 

AppArmor のステータスを確認するには:

 [root@xxx ~]# aa-status 

この構成で、sys_eval と sys_exec を実行できます。しかし、それはまだ mysql ディレクトリに限定されています。したがって、どのディレクトリからでもファイルを作成したり、スクリプトを実行したりすることはできません。

したがって、解決策は、mysql が新しいデータ ディレクトリにアクセスできるように apparmor にアクセス許可を追加することです。

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

追加:

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

サーバーを再起動します。

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

それでもうまくいかない場合は、nix パーミッションをチェックして、mysql が新しいディレクトリの所有者およびグループであることを再帰的に確認してください。

chown -R mysql:mysql “new datadir path”

それが誰かを助けることを願っています。

入札

于 2013-08-16T07:30:52.083 に答える
1

呼び出しているのidは実行可能ファイルである必要があります。通常、スクリプト自体は実行可能ではありませんbash path/to/script.sh。有効な実行可能コマンド ラインになるように、行を read に変更する必要があります。

また、アプリのアーマー設定が原因で sys_exec とその仲間が機能しないという報告が多数あります。アプリ アーマーが有効になっているかどうかを確認し、有効になっている場合は、その構成を変更して udfs を実行できるようにします。

HTH。

于 2013-08-15T08:36:22.577 に答える