在MySQL数据库日常运维中,对业务子账号的权限的统一控制十分必要。

业务上基本分为读账号和写账号两种账号,所以可以整理为固定的存储过程,让数据库自动生成对应的库的账号,随机密码。以及统一的读权限,写权限。(这里没有对 host进行过多的限制。只赋给通用的192.168.% 。有兴趣的同学可以在存储过程加个参数,对host 控制)

  1. delimiter //
  2. set session sql_log_bin=OFF;
  3. drop PROCEDURE IF EXISTS `usercrt` //
  4. CREATE DEFINER=`root`@`localhost` PROCEDURE `usercrt`(dbname varchar(64),type int,username varchar(16))
  5. COMMENT '创建用户 call usercrt(库名,1/0,'') 1写 0读 。最后一个参数为手动指定用户名,没有指定则用户名默认为 库名_w/r'
  6. label:BEGIN
  7. DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  8. DECLARE return_str varchar(255) DEFAULT '';
  9. DECLARE n int DEFAULT 12;
  10. DECLARE i INT DEFAULT 0;
  11. DECLARE pri_dbgrant VARCHAR(500);
  12. DECLARE pri_namepre VARCHAR(500);
  13. DECLARE pri_dbname VARCHAR(500);
  14. DECLARE check_user VARCHAR(500);
  15. DECLARE grantsql VARCHAR(200);
  16. DECLARE pri_username VARCHAR(500);
  17. DECLARE pri_grant VARCHAR(500);
  18. DECLARE notice_msg VARCHAR(500);
  19. set notice_msg=' 账号 ';
  20. WHILE i < n DO
  21. SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));
  22. SET i = i +1;
  23. END WHILE;
  24. IF dbname = '*' THEN
  25. SET pri_dbgrant="*.*";
  26. SET pri_namepre="alldb";
  27. ELSE
  28. select SCHEMA_NAME INTO pri_dbname FROM information_schema.SCHEMATA where SCHEMA_NAME=dbname and SCHEMA_NAME NOT IN ("information_schema","performance_schema","mysql","sys");
  29. IF pri_dbname IS NOT NULL AND pri_dbname !='' THEN
  30. SET pri_namepre=substring(pri_dbname,1,14);
  31. SET pri_dbgrant=concat(pri_dbname,'.*');
  32. ELSE
  33. select concat('库名错误且不能为系统库,请输入:',group_concat(SCHEMA_NAME)) FROM information_schema.SCHEMATA where SCHEMA_NAME NOT IN ("information_schema","performance_schema","mysql","sys");
  34. leave label;
  35. END IF ;
  36. END IF;
  37.  
  38. IF TYPE = 0 THEN
  39. SET pri_username=CONCAT(pri_namepre,'_r');
  40. set pri_grant="GRANT select on ";
  41. set notice_msg=' 读账号 ';
  42. ELSEIF TYPE = 1 THEN
  43. SET pri_username=CONCAT(pri_namepre,'_w');
  44. set pri_grant="GRANT Show view,select,insert,update,delete on ";
  45. set notice_msg=' 写账号 ';
  46. ELSE
  47. select "读写类型不正确 1 写 0 读";
  48. leave label;
  49. END IF;
  50.  
  51. IF username IS NOT NULL AND username !='' THEN
  52. SET pri_username =username;
  53. END IF;
  54.  
  55. select User INTO check_user from mysql.user where user=pri_username AND Host='192.168.%' ;
  56. IF check_user IS NOT NULL AND check_user !='' THEN
  57. SET return_str='';
  58. set grantsql=concat(pri_grant,pri_dbgrant,' to ',pri_username,'@"192.168.%"');
  59. ELSE
  60. set grantsql=concat(pri_grant,pri_dbgrant,' to ',pri_username,'@"192.168.%" identified by ',"'",return_str,"'");
  61.  
  62. END IF ;
  63.  
  64. SELECT grantsql;
  65. SET @gsql=grantsql;
  66. PREPARE STMT FROM @gsql;
  67. EXECUTE STMT;
  68. DEALLOCATE PREPARE STMT;
  69.  
  70. IF return_str!='' THEN
  71. set @crtsql="create table IF NOT EXISTS tmp_pwd(col varchar(100))";
  72. PREPARE STMT2 FROM @crtsql;
  73. EXECUTE STMT2;
  74. DEALLOCATE PREPARE STMT2;
  75. set @intsql=concat("insert into tmp_pwd(col) values('",return_str,"')");
  76. PREPARE STMT3 FROM @intsql;
  77. EXECUTE STMT3;
  78. DEALLOCATE PREPARE STMT3;
  79. END IF;
  80.  
  81. set @showsql=concat(' show grants for ',pri_username,'@"192.168.%"');
  82. PREPARE STMT4 FROM @showsql;
  83. EXECUTE STMT4;
  84. DEALLOCATE PREPARE STMT4;
  85. SELECT CONCAT('数据库名 ',pri_dbname,notice_msg, pri_username,' 密码 ',return_str);
  86.  
  87. END //
  88. delimiter ;

MySQL 日常运维业务账号权限的控制的更多相关文章

  1. mysql日常运维与参数调优

    日常运维 DBA运维工作 日常 导数据,数据修改,表结构变更 加权限,问题处理 其它 数据库选型部署,设计,监控,备份,优化等 日常运维工作: 导数据及注意事项 数据修改及注意事项 表结构变更及注意事 ...

  2. MySQL日常运维操作---持续更新

    1.查看当前连接数: 这些参数都是什么意思呢? Threads_cached ##mysql管理的线程池中还有多少可以被复用的资源 Threads_connected ##打开的连接数 Threads ...

  3. mysql日常运维

    一.Linux内核和发行版本 uname -a cat /etc/issue  二.glibc的版本   /lib/libc.so.6    ---没有man函数据的动态链接库   三.MySQL的版 ...

  4. Jenkins日常运维笔记-重启数据覆盖问题、迁移、基于java代码发版(maven构建)

    之前在公司机房部署了一套jenkins环境,现需要迁移至IDC机房服务器上,迁移过程中记录了一些细节:1)jenkins默认的主目录放在当前用户家目录路径下的.jenkins目录中.如jenkins使 ...

  5. 有赞MySQL自动化运维之路—ZanDB

      有赞MySQL自动化运维之路—ZanDB 一.前言 在互联网时代,业务规模常常出现爆发式的增长.快速的实例交付,数据库优化以及备份管理等任务都对DBA产生了更高的要求,单纯的凭借记忆力去管理那几十 ...

  6. MySQL数据库运维课程

    MySQL数据库运维课程 http://www.dataguru.cn/article-4834-1.html?union_site=comm100 课程大纲 第一课:机器选型.系统规划 第二课:安装 ...

  7. linux日常运维工作

    Linux的使用环境也日趋成熟,各种开源产品络绎不绝,大有百花齐放的盛景,那么当Linux落地企业,回归工作时,我们还要面对这Linux运维方面的诸多问题,今天我们特意组织一场有关Linux 在企业运 ...

  8. hadoop日常运维与升级总结

    日常运维 升级 问题处理方法 日常运维 进程管理 由于配置文件的更改,需要重启生效, 或者是进程自己因某种致命原因终止, 或者发现进程工作出现异常等情况下,需要进行手动进程的关闭或启动, 或者是增删节 ...

  9. zookeeper 用法和日常运维

    本文以ZooKeeper3.4.3版本的官方指南为基础:http://zookeeper.apache.org/doc/r3.4.3/zookeeperAdmin.html,补充一些作者运维实践中的要 ...

随机推荐

  1. linux_day3

    1.grep与find的区别? grep是查找文件内的字符而find则是查找文件 2.显示/etc/passwd中以nologin结尾的行 3. 输入ip addr命令后,过滤出包含ip的行 ip a ...

  2. maven(16)-灵活的环境构建

     多个环境 一个项目,在家的时候可能会在本机上运行,在公司可能在内网测试环境运行,上线后会在生产环境运行,在不同的环境中会有一些配置是不一样的,至少数据库就不一样.如果每换一个环境就去改所有配置太 ...

  3. matplotlib点线 坐标刻度 3D图绘制(六)

    plot语句中支持除X,Y以外的参数,以字符串形式存在,来控制颜色.线型.点型等要素,语法形式为: plt.plot(X, Y, 'format', ...) 1 点和线的样式 颜色 参数color或 ...

  4. Emacs快捷键(较全)

    C = Control M = Meta = Alt | Esc Del = Backspace 基本快捷键(Basic) C-x C-f "find"文件, 即在缓冲区打开/新建 ...

  5. 【Oozie】ambari安装oozie失败

    之前对azkaban的研究比较多,现在开个新坑,对Oozie开始深入了解 Traceback (most recent call last): File "/var/lib/ambari-a ...

  6. oracle sql练习 菜鸟入门!

    进入公司 ,首先是进行SQL培训 一下是针对oracle的emp与dept表进行的基础查询 --1.选择部门30中的所有员工: ; --2.列出所有办事员(CLERK)的姓名,编号和部门编号: sel ...

  7. 初始python(二)

    1. 列表list 1.1 切片# 定义一个list.list = [1, 2, 3, 4, 5] 从左往右读取字符(默认步长为 1 ).如:list[-2:-1]  # 返回一个list数据类型,[ ...

  8. sql根据子查询更新语句

    update … from语句 测试环境准备 create table #table1 ( id ) ); go create table #table2 ( id ) ); go , , , , , ...

  9. 把所有的小图标一起做成雪碧图吧 请用gulp-css-spriter.

    用gulp-css-spriter很简单. 第一步: 在某个文件夹用shitf+鼠标右键 第二步: npm install gulp-css-spriter https://www.npmjs.com ...

  10. 使用Visual Studio Code编写和激活ABAP代码 (上)

    猪年春节后的第一篇,Jerry祝各位猪年大吉! 2019年的六分之一马上就快过完了,不知道大家在新的一年是否给自己定了新的小目标呢?这里Jerry先预祝大家到2019年年底的时候,在年初制定的小目标都 ...