MySQL存储过程:用户授权量
写这些脚本需求放缓的调查记录到数据库,方便观看。
1. 因为默认mysql.slow_log表使用csv数据引擎,该数据不支持指数,因此,有必要改变MyISAM发动机。和query_time字段索引,优化搜索效率。
2. 部的用户进行授权。让大家要可通过调用 pub_getSlowQuery( limit ) 存储过程获取一天的慢查记录数据。
3. 存储过程命名约定:priv_ 起头的为私有存储过程。不须要对用户授权,以pub_起头的存储过程对全部的会员进行授权。仅仅同意执行。不可改动和删除。
-- 改动慢查日志表结构,加入索引优化查寻速度
DROP PROCEDURE IF EXISTS `mysql`.`priv_setSlowLogEngine`;
DELIMITER $$
CREATE PROCEDURE `mysql`.`priv_setSlowLogEngine`() COMMENT '改动慢查设置'
BEGIN
/** 关闭慢查记录 */
SET GLOBAL slow_query_log=0;
/** 改动存储方式 */
SET GLOBAL log_output='TABLE';
/** 记录日志的运行时间 */
SET GLOBAL long_query_time=3;
/** 改动表引擎 */
ALTER TABLE `mysql`.`slow_log` ENGINE=MYISAM;
/** 加入索引 */
ALTER TABLE `mysql`.`slow_log` ADD INDEX `query_time`(`query_time`);
/** 开启慢查记录 */
SET GLOBAL slow_query_log=1;
END$$
DELIMITER ; -- 获取慢查寻句子列表
DROP PROCEDURE IF EXISTS `mysql`.`pub_getSlowQuery`;
DELIMITER $$
CREATE PROCEDURE `mysql`.`pub_getSlowQuery`(IN top INT) COMMENT '获取慢查记录'
BEGIN
/**
* 昨天凌晨一点的时间
* 业务需求是每天凌晨时间运行,所以是取昨天凌晨到当前时间的全部慢查日志 */
DECLARE yesterday DATETIME;
SELECT CONCAT_WS(' ', DATE_SUB(CURDATE(),INTERVAL 1 DAY), '00:00:00') INTO yesterday;
SET @sql=CONCAT("SELECT * FROM `mysql`.`slow_log` WHERE `query_time`>0 ORDER BY `query_time` DESC LIMIT 0",top);
/** 使用预处理运行SQL句子 */
PREPARE m FROM @sql;
EXECUTE m;
DEALLOCATE PREPARE m;
END$$
DELIMITER ; -- 授权操作
DROP PROCEDURE IF EXISTS `mysql`.`priv_grantToProcedure`;
DELIMITER $$
CREATE PROCEDURE `mysql`.`priv_grantToProcedure`( IN procedureName VARCHAR(30) ) COMMENT '对存储过程授权'
BEGIN
DECLARE not_found_data INT DEFAULT 0;
DECLARE userName VARCHAR(20) DEFAULT '';
DECLARE hostName VARCHAR(20) DEFAULT ''; /**
* 将用户列表读入游标 */
DECLARE users CURSOR FOR SELECT `user`,`host` FROM mysql.user WHERE `user`!='csc86';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found_data=1; OPEN users;
WHILE not_found_data=0 DO
FETCH users INTO userName,hostName;
SET @sql=CONCAT('GRANT Execute ON PROCEDURE `mysql`.`',procedureName,'` TO `',userName,'`@`',hostName,'`'); /** 使用预处理运行SQL句子 */
PREPARE m FROM @sql;
EXECUTE m;
DEALLOCATE PREPARE m;
END WHILE;
CLOSE users;
END$$
DELIMITER ; -- 将mysql库中以pub_开头的存储过程对全部用户授权
DROP PROCEDURE IF EXISTS `mysql`.`priv_setPrivileges`;
DELIMITER $$
CREATE PROCEDURE `mysql`.`priv_setPrivileges`() COMMENT '设置调用存储过程权限'
BEGIN
/**
* 游标 */
DECLARE not_found_data INT DEFAULT 0; /**
* 存储过程名称 */
DECLARE proc_name VARCHAR(30) DEFAULT ''; /**
* 读取全部公开的存储过程 */
DECLARE procedures CURSOR FOR SELECT `name` FROM `mysql`.`proc` WHERE `db`='mysql' AND `type`='PROCEDURE' AND `name` REGEXP '^pub_'; /**
* 到达游标尾部时,设置not_found_data为1 */
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found_data = 1; /**
* 打开游标进入循环 */
-- priv_grantToProcedure
OPEN procedures;
TRUNCATE TABLE mysql.`procs_priv`;
WHILE not_found_data=0 DO
FETCH procedures INTO proc_name;
CALL priv_grantToProcedure( proc_name );
END WHILE;
/** 关闭游标 */
CLOSE procedures; /** 刷新权限 */
FLUSH PRIVILEGES;
END$$
DELIMITER ;
版权声明:本文博客原创文章。博客,未经同意,不得转载。
MySQL存储过程:用户授权量的更多相关文章
- MYSQL存储过程实现用户登录
MYSQL存储过程实现用户登录 CREATE DEFINER=`root`@`%` PROCEDURE `uc_session_login`( ), ) ) LANGUAGE SQL NOT DETE ...
- MySQL 授权用户 ; 存储过程的DEFINER; 命令分隔符DELIMITER
最近项目中遇到有人使用DEFINER这样的关键字,找了半天没有怎么理解这个意思.以为是限制谁使用这个存储过程,后来测试发现并不是这样. 搜索网上发现很多说法都不正确.看到一篇博客,做了如下介绍,才有所 ...
- MySQL存储过程(转)
一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b" ...
- MySQL 存储过程
MySQL 存储过程 存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数. 简介 存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中. 存储过程 ...
- mysql存储过程详解
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- MySql 存储过程、触发器和权限问题
存储过程 1.1 什么是存储过程 存储过程,带有逻辑的sql语句 之前的sql没有条件判断,没有循环 存储过程带上流程控制语句(if while) 1.2 存储过程特点 1)执行效率非常快!存储过程 ...
- mysql存储过程语法及实例
存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程cr ...
- mysql 操作用户权限
使用可以对mysql数据库用户表有操作权限的用户名登陆mysqlinsert into user(Host,User,Password) values('%','name','password');如 ...
- Mysql存储过程调用
mysql存储过程实例教程 发布时间:2014-04-09编辑:JB01 这篇文章主要介绍了mysql存储过程的使用方法,mysql存储过程实例教程,有需要的朋友参考下. 1.1create p ...
- mysql存储过程详细教程
记录mysql存储过程中的关键语法:DELIMITER // 声明语句结束符,用于区分;CREATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程 ...
随机推荐
- HDU 2829 Lawrence(动态规划-四边形不等式)
Lawrence Problem Description T. E. Lawrence was a controversial figure during World War I. He was a ...
- Java集合关于ArrayList
ArrayList实现源码分析 2016-04-11 17:52 by 淮左, 207 阅读, 0 评论, 收藏, 编辑 本文将以以下几个问题来探讨ArrayList的源码实现1.ArrayList的 ...
- Luci - UCI (Unified Configuration Interface)
参考: http://wiki.openwrt.org/doc/techref/uc http://luci.subsignal.org/api/luci/modules/luci.model.uci ...
- surfaceflinger中各个layer的排序
surfaceflinger的主要工作就是负责把上层传递下来的各个不同的layer进行composition. 这里,我们来讨论一下各个layer在surfaceflinger中的上下排序关系和相关的 ...
- pygame写的弹力球
这是pygame写的弹力球 运行效果: ======================================================== 代码部分: ================= ...
- 工厂方法模式(factory method pattern)
工厂方法模式相对于简单工厂模式的长处是为了更好的拓展,当假设再新加一种产品,对于简单工厂模式来说须要改动核心的工厂类,但对于工厂方法模式则不须要,在工厂方法模式中核心的工厂类不再负责创建全部产品的创建 ...
- sql语句用'in'执行多条语句时候,执行错误的解决方法
一般报错是出现,无法将nvarchar类型转换为int类型 这是因为 SqlParameter 带参数 是不能用 , 分割的. 第一种解决方法就是 不用 SqlParameter 带参数的s ...
- libyuv编
下载代码(墙): git clone http://git.chromium.org/external/libyuv.git 用 make 编译(linux.mingw.cygwin): mak ...
- 安装sunvirtualbox
按照网友提供的方法安装sunvirtualbox,老提示:依赖关系不满足: libpython2.6 (>= 2.6) 后来用终端运行 sudo apt-get install virtualb ...
- Android数据库专家秘籍(七)经验LitePal查询艺术
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/40153833 经过了多篇文章的学习,我们已经把LitePal中的绝大部分内容都掌握 ...