美文网首页
Mysql安装udf调用系统程序

Mysql安装udf调用系统程序

作者: JhonHarrison | 来源:发表于2018-11-14 10:35 被阅读0次

    安装步骤:

    1. 下载地址

    2. 解压后进入文件目录,编译 so文件

      gcc -DMYSQL_DYNAMIC_PLUGIN -fPIC -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so
      
      • 此处需使用 mysql_config --include 查看当前主机的 include 目录。
    3. 将编译后的 lib_mysqludf_sys.so 拷贝至plugin_dir.
      可使用 mysql_config --plugindir 查看插件目录,或者登录mysql,执行

      SHOW VARIABLES LIKE 'plugin_dir';
      
      • 注意所属用户和权限
    4. 执行lib_mysqludf_sys.sql里边的sql语句

      DROP FUNCTION IF EXISTS lib_mysqludf_sys_info;
      DROP FUNCTION IF EXISTS sys_get;
      DROP FUNCTION IF EXISTS sys_set;
      DROP FUNCTION IF EXISTS sys_exec;
      DROP FUNCTION IF EXISTS sys_eval;
      
      CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.so';
      CREATE FUNCTION sys_get RETURNS string SONAME 'lib_mysqludf_sys.so';
      CREATE FUNCTION sys_set RETURNS int SONAME 'lib_mysqludf_sys.so';
      CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so';
      CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so';
      
    5. 来个触发器测试

      DELIMITER $$
      
      USE `testsb`$$
      DROP TRIGGER /*!50032 IF EXISTS */ `t_working`$$
      CREATE
          /*!50017 DEFINER = 'root'@'%' */
          TRIGGER `t_working` BEFORE UPDATE ON `t_tel` 
          FOR EACH ROW BEGIN 
          DECLARE done INT DEFAULT 0; 
          IF new.ACTIVE!=old.ACTIVE THEN
          SET done = sys_exec("sh /home/working/test.sh");
          UPDATE t_working SET working=new.ACTIVE WHERE id=new.wkID;
          END IF;
          END;
      $$
      
      DELIMITER ;
      
    6. 考虑如果黑客攻入数据库,这个sys_exec的权限是不是太大了。查到可以在sudoers 文件中限定普通用户的可执行命令。这里应该是mysql用户执行sys_exec中的命令,如果限定会不会影响mysql服务的运行。
      有待测试.

    相关文章

      网友评论

          本文标题:Mysql安装udf调用系统程序

          本文链接:https://www.haomeiwen.com/subject/tgikfqtx.html