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

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

delimiter //
set session sql_log_bin=OFF;
drop PROCEDURE IF EXISTS `usercrt` //
CREATE DEFINER=`root`@`localhost` PROCEDURE `usercrt`(dbname varchar(64),type int,username varchar(16))
COMMENT '创建用户 call usercrt(库名,1/0,'') 1写 0读 。最后一个参数为手动指定用户名,没有指定则用户名默认为 库名_w/r'
label:BEGIN
DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
DECLARE return_str varchar(255) DEFAULT '';
DECLARE n int DEFAULT 12;
DECLARE i INT DEFAULT 0;
DECLARE pri_dbgrant VARCHAR(500);
DECLARE pri_namepre VARCHAR(500);
DECLARE pri_dbname VARCHAR(500);
DECLARE check_user VARCHAR(500);
DECLARE grantsql VARCHAR(200);
DECLARE pri_username VARCHAR(500);
DECLARE pri_grant VARCHAR(500);
DECLARE notice_msg VARCHAR(500);
set notice_msg=' 账号 ';
WHILE i < n DO
SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));
SET i = i +1;
END WHILE;
IF dbname = '*' THEN
SET pri_dbgrant="*.*";
SET pri_namepre="alldb";
ELSE
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");
IF pri_dbname IS NOT NULL AND pri_dbname !='' THEN
SET pri_namepre=substring(pri_dbname,1,14);
SET pri_dbgrant=concat(pri_dbname,'.*');
ELSE
select concat('库名错误且不能为系统库,请输入:',group_concat(SCHEMA_NAME)) FROM information_schema.SCHEMATA where SCHEMA_NAME NOT IN ("information_schema","performance_schema","mysql","sys");
leave label;
END IF ;
END IF; IF TYPE = 0 THEN
SET pri_username=CONCAT(pri_namepre,'_r');
set pri_grant="GRANT select on ";
set notice_msg=' 读账号 ';
ELSEIF TYPE = 1 THEN
SET pri_username=CONCAT(pri_namepre,'_w');
set pri_grant="GRANT Show view,select,insert,update,delete on ";
set notice_msg=' 写账号 ';
ELSE
select "读写类型不正确 1 写 0 读";
leave label;
END IF; IF username IS NOT NULL AND username !='' THEN
SET pri_username =username;
END IF; select User INTO check_user from mysql.user where user=pri_username AND Host='192.168.%' ;
IF check_user IS NOT NULL AND check_user !='' THEN
SET return_str='';
set grantsql=concat(pri_grant,pri_dbgrant,' to ',pri_username,'@"192.168.%"');
ELSE
set grantsql=concat(pri_grant,pri_dbgrant,' to ',pri_username,'@"192.168.%" identified by ',"'",return_str,"'"); END IF ; SELECT grantsql;
SET @gsql=grantsql;
PREPARE STMT FROM @gsql;
EXECUTE STMT;
DEALLOCATE PREPARE STMT; IF return_str!='' THEN
set @crtsql="create table IF NOT EXISTS tmp_pwd(col varchar(100))";
PREPARE STMT2 FROM @crtsql;
EXECUTE STMT2;
DEALLOCATE PREPARE STMT2;
set @intsql=concat("insert into tmp_pwd(col) values('",return_str,"')");
PREPARE STMT3 FROM @intsql;
EXECUTE STMT3;
DEALLOCATE PREPARE STMT3;
END IF; set @showsql=concat(' show grants for ',pri_username,'@"192.168.%"');
PREPARE STMT4 FROM @showsql;
EXECUTE STMT4;
DEALLOCATE PREPARE STMT4;
SELECT CONCAT('数据库名 ',pri_dbname,notice_msg, pri_username,' 密码 ',return_str); END //
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. PID控制算法

    PID控制算法 四轴如何起飞的原理 四轴飞行器的螺旋桨与空气发生相对运动,产生了向上的升力,当升力大于四轴的重力时四轴就可以起飞了. 四轴飞行器飞行过程中如何保持水平: 我们先假设一种理想状况:四个电 ...

  2. 一步一步pwn路由器之栈溢出实战

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 本文以 DVRF 中的第一个漏洞程序 stack_bof_01 为 ...

  3. Oracle案例09——ORA-12154: TNS:could not resolve the connect identifier specified

    DG处理的问题还是蛮多的,但这次遇到一个比较奇葩的事情,表面配置.网络都没啥问题,但主备的同步始终有问题,经过多次调整参数.重新部署问题依旧,最终还是求助mos问题得以解决,现将处理过程记录如下: 一 ...

  4. MVC Controller的激活

    各Controller的继承关系 Controller最重要的是对Execute方法的调用,当目标Controller对象被激活后,对请求的后续处理和最终响应均是通过执行这个Execute方法来完成. ...

  5. 企业级Ngnix基于域名的配置_include

    使用include进行nginx.conf文件1. 编辑文件 vim /usr/local/nginx/conf/nginx.conf worker_processes 1; events { wor ...

  6. C# 表达式树 创建、生成、使用、lambda转成表达式树~表达式树的知识详解

    笔者最近学了表达式树这一部分内容,为了加深理解,写文章巩固知识,如有错误,请评论指出~ 表达式树的概念 表达式树的创建有 Lambda法 和 组装法. 学习表达式树需要 委托.Lambda.Func& ...

  7. matlab中的knn函数

    knn 最邻近分类 Class = knnclassify(test_data,train_data,train_label, k, distance, rule) k:选择最邻近的数量 distan ...

  8. [EffectiveC++]item16:Use the same form in corresponding uses of new and delete

  9. jQuery中的$.grep()使用

    grep()方法用于数组元素过滤筛选 grep(array,callback,invert) array:待过滤数组; callback:处理数组中的每个元素,并过滤元素,该函数中包含两个参数,第一个 ...

  10. Burp Suite使用介绍总结

    Burp Suite使用介绍(一) 小乐天 · 2014/05/01 19:54 Getting Started Burp Suite 是用于攻击web 应用程序的集成平台.它包含了许多工具,并为这些 ...