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) 声明存储过程 ...
随机推荐
- SWT的ListVierer的使用
package com.test; import java.util.ArrayList; import java.util.List; import model.People; import org ...
- C++基础学习教程(八)
转载请注明出处:http://blog.csdn.net/suool/article/details/38300117 引入 在进行下一步的学习之前,我们须要厘清几个概念. RAII 首先介绍一个编程 ...
- python开发_tkinter_小球完全弹性碰撞游戏
python开发_tkinter_小球完全弹性碰撞游戏 完成这个小球的完全弹性碰撞游戏灵感来自于: 下面是我花了一周下班时间所编写的一个小球完全弹性碰撞游戏: 游戏初始化状态: 最下面的游标和修改 ...
- apache2.4.4启用deflate压缩
今天在看<高性能php应用开发>这本书,说道如何启用mod_deflate: 启用如下模块: LoadModule deflate_module modules/mod_deflate.s ...
- uva10465(完全背包,要求装满背包)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&c ...
- C#操作注册表--DarrenF
步骤/方法 读取指定名称的注册表的值 private string GetRegistData(string name) { string registData; RegistryKey hkml = ...
- Chromium
Chromium多进程架构 多进程架构 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//Start_Here_Bac ...
- POJ 2538 WERTYU水的问题
[题目简述]:题意非常easy,没有trick. [分析]:事实上这题还是挺有趣的,在 算法竞赛入门经典中也有这一题. 详见代码: // 120K 0Ms /* 边学边做 -- */ // 字符串:W ...
- ZOJ 3635 Cinema in Akiba[ 大规模阵列 ]
门户:problemCode=3635">ZOJ 3635 Cinema in Akiba Time Limit: 3 Seconds Memory Limit: 65536 ...
- 密码 hdu
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) ...