MySQL 日常运维业务账号权限的控制
在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 日常运维业务账号权限的控制的更多相关文章
- mysql日常运维与参数调优
日常运维 DBA运维工作 日常 导数据,数据修改,表结构变更 加权限,问题处理 其它 数据库选型部署,设计,监控,备份,优化等 日常运维工作: 导数据及注意事项 数据修改及注意事项 表结构变更及注意事 ...
- MySQL日常运维操作---持续更新
1.查看当前连接数: 这些参数都是什么意思呢? Threads_cached ##mysql管理的线程池中还有多少可以被复用的资源 Threads_connected ##打开的连接数 Threads ...
- mysql日常运维
一.Linux内核和发行版本 uname -a cat /etc/issue 二.glibc的版本 /lib/libc.so.6 ---没有man函数据的动态链接库 三.MySQL的版 ...
- Jenkins日常运维笔记-重启数据覆盖问题、迁移、基于java代码发版(maven构建)
之前在公司机房部署了一套jenkins环境,现需要迁移至IDC机房服务器上,迁移过程中记录了一些细节:1)jenkins默认的主目录放在当前用户家目录路径下的.jenkins目录中.如jenkins使 ...
- 有赞MySQL自动化运维之路—ZanDB
有赞MySQL自动化运维之路—ZanDB 一.前言 在互联网时代,业务规模常常出现爆发式的增长.快速的实例交付,数据库优化以及备份管理等任务都对DBA产生了更高的要求,单纯的凭借记忆力去管理那几十 ...
- MySQL数据库运维课程
MySQL数据库运维课程 http://www.dataguru.cn/article-4834-1.html?union_site=comm100 课程大纲 第一课:机器选型.系统规划 第二课:安装 ...
- linux日常运维工作
Linux的使用环境也日趋成熟,各种开源产品络绎不绝,大有百花齐放的盛景,那么当Linux落地企业,回归工作时,我们还要面对这Linux运维方面的诸多问题,今天我们特意组织一场有关Linux 在企业运 ...
- hadoop日常运维与升级总结
日常运维 升级 问题处理方法 日常运维 进程管理 由于配置文件的更改,需要重启生效, 或者是进程自己因某种致命原因终止, 或者发现进程工作出现异常等情况下,需要进行手动进程的关闭或启动, 或者是增删节 ...
- zookeeper 用法和日常运维
本文以ZooKeeper3.4.3版本的官方指南为基础:http://zookeeper.apache.org/doc/r3.4.3/zookeeperAdmin.html,补充一些作者运维实践中的要 ...
随机推荐
- linux_day3
1.grep与find的区别? grep是查找文件内的字符而find则是查找文件 2.显示/etc/passwd中以nologin结尾的行 3. 输入ip addr命令后,过滤出包含ip的行 ip a ...
- maven(16)-灵活的环境构建
多个环境 一个项目,在家的时候可能会在本机上运行,在公司可能在内网测试环境运行,上线后会在生产环境运行,在不同的环境中会有一些配置是不一样的,至少数据库就不一样.如果每换一个环境就去改所有配置太 ...
- matplotlib点线 坐标刻度 3D图绘制(六)
plot语句中支持除X,Y以外的参数,以字符串形式存在,来控制颜色.线型.点型等要素,语法形式为: plt.plot(X, Y, 'format', ...) 1 点和线的样式 颜色 参数color或 ...
- Emacs快捷键(较全)
C = Control M = Meta = Alt | Esc Del = Backspace 基本快捷键(Basic) C-x C-f "find"文件, 即在缓冲区打开/新建 ...
- 【Oozie】ambari安装oozie失败
之前对azkaban的研究比较多,现在开个新坑,对Oozie开始深入了解 Traceback (most recent call last): File "/var/lib/ambari-a ...
- oracle sql练习 菜鸟入门!
进入公司 ,首先是进行SQL培训 一下是针对oracle的emp与dept表进行的基础查询 --1.选择部门30中的所有员工: ; --2.列出所有办事员(CLERK)的姓名,编号和部门编号: sel ...
- 初始python(二)
1. 列表list 1.1 切片# 定义一个list.list = [1, 2, 3, 4, 5] 从左往右读取字符(默认步长为 1 ).如:list[-2:-1] # 返回一个list数据类型,[ ...
- sql根据子查询更新语句
update … from语句 测试环境准备 create table #table1 ( id ) ); go create table #table2 ( id ) ); go , , , , , ...
- 把所有的小图标一起做成雪碧图吧 请用gulp-css-spriter.
用gulp-css-spriter很简单. 第一步: 在某个文件夹用shitf+鼠标右键 第二步: npm install gulp-css-spriter https://www.npmjs.com ...
- 使用Visual Studio Code编写和激活ABAP代码 (上)
猪年春节后的第一篇,Jerry祝各位猪年大吉! 2019年的六分之一马上就快过完了,不知道大家在新的一年是否给自己定了新的小目标呢?这里Jerry先预祝大家到2019年年底的时候,在年初制定的小目标都 ...