MySQL儲存過程 使用者授權量

2021-09-07 01:15:57 字數 3513 閱讀 1609

寫這些指令碼需求放緩的調查記錄到資料庫,方便**。

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儲存過程 批量為使用者授權

編寫出這些指令碼的需求是把慢查日誌寫入資料庫中,方便檢視。1.由於預設的mysql.slow log表使用的是csv資料引擎,不支援對資料進行索引,所以需要將其修改為myisam引擎,並對query time欄位進行索引以優化查尋效率。2.需要對所有的使用者進行授權,讓大家要可通過呼叫 pub ge...

MySQL儲存過程 批量為使用者授權

編寫出這些指令碼的需求是把慢查日誌寫入資料庫中,方便檢視。1.由於預設的mysql.slow log表使用的是csv資料引擎,不支援對資料進行索引,所以需要將其修改為myisam引擎,並對query time欄位進行索引以優化查尋效率。2.需要對所有的使用者進行授權,讓大家要可通過呼叫 pub ge...

儲存過程授權給子使用者

將本身的儲存過程授權給其他使用者使用 使用者名稱 user ohter 儲存過程案例 清空表資料 儲存過程案例 清空表資料 create or replace package user a.pkg tra tab operation is procedure p tab truncate a 方法一...