账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mysql自定义函数实现表的指定列进行数据脱敏(PS:来自mysql小白的提问)
    • 2020-01-01 00:00
    • 10
    32
    0

    要求:不考虑原来字段的值,只考虑数据长度,通过脚本update tabA set colA = stringMask(colA )实现数据脱敏,例如张三丰--ASD
    提问:将指定列名作为mysql自定义函数的参数,可否获取该指定列的数据???还是说这种情况通过存储过程实现更好???

    背景知识:
    自定义函数(user-defined function UDF)与存储过程的区别
    1,函数方法的参数列表只允许IN类型的参数,并且不允许指定IN关键字
    2,函数方法返回一个单一的值,值的类型在存储方法的头部定义
    3,函数方法可以在SQL语句内部调用
    4,函数方法不能返回结果集
    UDF可以没有参数,但UDF必须有且只有一个返回值

    下面是mysql自定义函数,实现的是对传进去的某个字符串进行数据脱敏
    CREATE DEFINER=root@localhost FUNCTION myMask(v_str VARCHAR(800)) RETURNS varchar(800) CHARSET utf8
    BEGIN

    DECLARE str VARCHAR(800) DEFAULT '';
    DECLARE    strlen VARCHAR(800) DEFAULT '';
    DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    DECLARE return_str varchar(800) DEFAULT '';
    DECLARE i INT DEFAULT 0;
    
    SET str = v_str;
    set strlen = CHAR_LENGTH(str);
    
    WHILE i< CONVERT(strlen,SIGNED) DO
        SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));
        SET i = i +1;
    END WHILE;
    RETURN return_str;

    END

    希望通过优化,实现上述要求。

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 雷袭月启 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部