日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Mysql修改存儲過程相關權限問題

瀏覽:37日期:2023-10-07 18:44:54

在使用mysql數據庫經常都會遇到這么一個問題,其它用戶定義的存儲過程,現在使用另一個用戶卻無法修改或者刪除等;正常情況下存儲過程的定義者對它有修改、刪除的權限;但是其它的用戶就要相于的授權,不然無法查看、調用;

mysql 中使用用戶A創建一個存儲過程,現在想通過另一個用戶B來修改A創建的存儲過程;以下記錄就是基于這樣的情況產生的;

Mysql修改存儲過程相關權限問題

用戶A對OTO3庫的權限:

mysql> show grants for ’a’@’%’;+---------------------------------------------------+| Grants for a@% |+---------------------------------------------------+| GRANT USAGE ON *.* TO ’a’@’%’|| GRANT ALL PRIVILEGES ON `OTO3`.* TO ’a’@’%’ |+---------------------------------------------------+2 rows in set (0.00 sec)

用戶B的權限:

mysql> show grants for ’swper’@’%’;+----------------------------------------------------------------------+| Grants for swper@% |+----------------------------------------------------------------------+| GRANT USAGE ON *.* TO ’swper’@’%’ || GRANT SELECT, UPDATE, DELETE, DROP, ALTER ON `OTO3`.* TO ’swper’@’%’ |+----------------------------------------------------------------------+2 rows in set (0.00 sec)

以用戶B的身份登陸Mysql操作;

[root@mysql ~]# mysql -h10.0.10.110 -uswper -p123456

查存儲過程列表時就提示沒有權限了:

mysql> select `name` from mysql.proc where db = ’OTO3’ and `type` = ’PROCEDURE’;ERROR 1142 (42000): SELECT command denied to user ’swper’@’mysql’ for table ’proc’

以root身份給B用戶添加一個查看存儲過程的權限:

mysql> grant select on mysql.proc to ’swper’@’%’;Query OK, 0 rows affected (0.00 sec) mysql> show grants for ’swper’@’%’;+----------------------------------------------------------------------+| Grants for swper@% |+----------------------------------------------------------------------+| GRANT USAGE ON *.* TO ’swper’@’%’ || GRANT SELECT, UPDATE, DELETE, DROP, ALTER ON `OTO3`.* TO ’swper’@’%’ || GRANT SELECT ON `mysql`.`proc` TO ’swper’@’%’ |+----------------------------------------------------------------------+3 rows in set (0.00 sec)

再回到B用戶里查看存儲過程列表:

mysql> select `name` from mysql.proc where db = ’OTO3’ and `type` = ’PROCEDURE’;+------------------------+| name |+------------------------+| proc_cs|+------------------------+1 rows in set (0.00 sec)

此時發現多了一個mysql庫,但只有對mysql.proc有查詢權限:

mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || OTO3|| mysql |+--------------------+3 rows in set (0.00 sec)

mysql庫中只有一個表:proc

mysql> use mysqlmysql> show tables;+-----------------+| Tables_in_mysql |+-----------------+| proc |+-----------------+1 row in set (0.00 sec)

同樣也可以看到存儲過程的詳細信息:

mysql> show create procedure proc_csG*************************** 1. row *************************** Procedure: proc_cs sql_mode: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Create Procedure: CREATE DEFINER=`a`@`%` PROCEDURE `proc_cs`()BEGIN

嘗試修改存儲過程的配置:

mysql> ALTER PROCEDURE proc_cs MODIFIES SQL DATA SQL SECURITY INVOKER;ERROR 1370 (42000): alter routine command denied to user ’b’@’%’ for routine ’OTO3.proc_cs’

為了方便查看在Navicat工具上嘗試修改存儲過程,在保存的時候報如下權限問題:

1227 -Access denied;you need(at least one of)the SUPER privilege(s) for this operation

嘗試添加一個存儲過程,報權限信息:

1044 - Access denied for user ‘b’@’%’ to database ‘OTO3’

這里表示b用戶沒有對OTO3有授權存儲過程的修改權限;

以B用戶嘗試調用一下存儲過程:

Procedure execution failed1370 - execute command denied to user ‘b’@’%’ for routine ‘OTO3.proc_cs’

這里很明顯連運行權限也沒有;

嘗試刪除原有的a用戶定義的存儲過程,也會報權限信息,如下:

1370 - alter routine command denied to user ‘b’@’%’ for routine ‘OTO3.proc_cs’

可以看出B用戶連調用存儲過程的權限都沒有,這里先加入執行權限:

接下來添加一個執行存儲過程的權限:

mysql> grant execute on OTO3.* to ’b’@’%’;Query OK, 0 rows affected (0.00 sec) mysql> show grants for ’b’@’%’;+-------------------------------------------------------------------------------+| Grants for b@% |+-------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO ’b’@’%’ || GRANT SELECT, UPDATE, DELETE, DROP, ALTER, EXECUTE ON `OTO3`.* TO ’b’@’%’ || GRANT SELECT ON `mysql`.`proc` TO ’b’@’%’ |+-------------------------------------------------------------------------------+3 rows in set (0.00 sec)

再次執行一下存儲過程,發現成功了;

時間: 0.080msProcedure executed successfully受影響的行: 0

那再添加一下創建添加存儲過程的權限:

mysql> grant CREATE ROUTINE on OTO3.* to ’b’@’%’;Query OK, 0 rows affected (0.00 sec)

mysql> show grants for ’b’@’%’;+-----------------------------------------------------------------------------------------------+| Grants for b@% |+-----------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO ’b’@’%’ || GRANT SELECT, UPDATE, DELETE, DROP, ALTER, EXECUTE, CREATE ROUTINE ON `OTO3`.* TO ’b’@’%’ || GRANT SELECT ON `mysql`.`proc` TO ’b’@’%’ |+-----------------------------------------------------------------------------------------------+3 rows in set (0.00 sec)

上面添加權限后就可以創建存儲過程了;

CREATE DEFINER=`b`@`%` PROCEDURE `aaaa`()BEGIN #Routine body goes here...SELECT * from mysql.user;END

但是自己創建的都無法刪除;

1370 - alter routine command denied to user ‘b’@’%’ for routine ‘OTO3.aaaa’

接下來再添加一個修改的權限,也可以刪除的哦;

mysql> grant alter ROUTINE on OTO3.* to ’b’@’%’;Query OK, 0 rows affected (0.01 sec)

查看用戶權限

mysql> show grants for ’b’@’%’;+--------------------------------------------------------------------------------------------------------------+| Grants for b@% |+--------------------------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO ’b’@’%’ || GRANT SELECT, UPDATE, DELETE, DROP, ALTER, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `OTO3`.* TO ’b’@’%’ || GRANT SELECT ON `mysql`.`proc` TO ’b’@’%’|+--------------------------------------------------------------------------------------------------------------+3 rows in set (0.00 sec)

上面添加完alter ROUTINE權限后就可以對OTO3所有的存儲過程有刪除權限[自己定義的增、刪、改],別人定義的可以刪除,但是還不能修改;修改別人定義的存儲過程會有如下提示:

1227 - Access denied; you need (at least one of)the SUPER privilege(s) for this operation

這里說明一下這個SUPER權限在哪里?通過查看用戶權限原來在這里:

mysql> select * from mysql.user where user=’b’G*************************** 1. row *************************** Host: % User: b Select_priv: N Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Reload_priv: N Shutdown_priv: N Process_priv: N File_priv: N Grant_priv: N References_priv: N Index_priv: N Alter_priv: N Show_db_priv: N Super_priv: N Create_tmp_table_priv: N Lock_tables_priv: N Execute_priv: N Repl_slave_priv: N Repl_client_priv: N Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Create_user_priv: N Event_priv: N Trigger_priv: NCreate_tablespace_priv: N ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0plugin: mysql_native_password authentication_string: *CCB4F88E945E0E14F9BEB093EB797BB0BDBFA175 password_expired: N password_last_changed: 2017-03-06 11:37:35 password_lifetime: NULL account_locked: N1 row in set (0.00 sec)

嘗試添加一下這個SUPER權限看看:

mysql> grant SUPER on OTO3.* to ’b’@’%’;ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES mysql> grant SUPER on *.* to ’b’@’%’;Query OK, 0 rows affected (0.00 sec)

不能對指定的庫執行這個權限,因為SUPER為全局的就是整個mysql的權限;

mysql> show grants for ’swper’@’%’;+--------------------------------------------------------------------------------------------------------------+| Grants for swper@% |+--------------------------------------------------------------------------------------------------------------+| GRANT SUPER ON *.* TO ’swper’@’%’ || GRANT SELECT, UPDATE, DELETE, DROP, ALTER, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `OTO3`.* TO ’swper’@’%’ || GRANT SELECT ON `mysql`.`proc` TO ’swper’@’%’|+--------------------------------------------------------------------------------------------------------------+3 rows in set (0.00 sec)

再次檢查時會發現 Super_priv: Y 變化了;再修改一下別人定義的存儲過程;

mysql> select * from mysql.user where user=’b’G

查看所有數據庫,發現mysql庫只有一張proc表有讀取的權限,SUPER并非我所想象中那么強大;

mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || OTO3|| mysql |+--------------------+3 rows in set (0.00 sec)

仔細觀看會發現執行語句:

mysql> select * from mysql.user where user=’b’G

可以看到有 Create_routine_priv: N和 Alter_routine_priv: N 這兩個明顯就是對存儲過程的權限嘛,能不能不用SUPER而使用這兩個權限呢?

回收一下這個SUPER權限;

mysql> revoke super on *.* from ’b’@’%’;Query OK, 0 rows affected (0.01 sec)

再添加Alter_routine_priv,Create_routine_priv

mysql> grant alter routine,create routine on *.* to ’b’@’%’;Query OK, 0 rows affected (0.00 sec)

查看用戶b權限

mysql> show grants for ’b’@’%’;+--------------------------------------------------------------------------------------------------------------+| Grants for b@% |+--------------------------------------------------------------------------------------------------------------+| GRANT CREATE ROUTINE, ALTER ROUTINE ON *.* TO ’b’@’%’ || GRANT SELECT, UPDATE, DELETE, DROP, ALTER, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `OTO3`.* TO ’b’@’%’ || GRANT SELECT ON `mysql`.`proc` TO ’b’@’%’|+--------------------------------------------------------------------------------------------------------------+3 rows in set (0.00 sec)

發現還是報相同的權限問題:

1227 - Access denied; you need (at least one of)the SUPER privilege(s) for this operation

執行上面權限后發現,可以看到其它的系統庫:[例如sys庫也有存儲過程,由于這兩個權限是全局的]

mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || OTO3|| mysql || performance_schema || sys|| test|+--------------------+6 rows in set (0.00 sec)

這兩個權限更大,連系統庫sys中的存儲過程都能看到,甚至修改刪除,非常危險;決定再次回收權限

create routine,alter routine;mysql> revoke create routine,alter routine on *.* from ’b’@’%’;

還是使用SUPER權限比較安全;

通過上面的測試得出以下結論:

查看存儲過程權限:SELECT #是對mysql.proc表的權限; 執行存儲過程權限:EXECUTE #是對指定數據庫的權限; 創建存儲過程權限:CREATE ROUTINE #是對指定數據庫的權限; 修改存儲過程權限:ALTER ROUTINE #是對指定數據庫的中自己定義的存儲過程; 修改別人定義的存儲過程權限:SUPER #是對全局整個mysql的權限;

簡來說用戶A在數據庫OTO3中定義了一個存儲過程,現在想用用戶B來執行、修改存儲過程,需要對用戶B添加以下權限:

GRANT SELECT ON MYSQL.PROC TO ’B’;GRANT EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `OTO3`.* TO ’B’;GRANT SUPER ON *.* TO ’B’;

所以用戶B的最基本的權限:

mysql> show grants for ’b’@’%’;+----------------------------------------------------------------------------------------+| Grants for b@% |+----------------------------------------------------------------------------------------+| GRANT SUPER ON *.* TO ’b’@’%’ || GRANT SELECT, ALTER, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `OTO3`.* TO ’b’@’%’ || GRANT SELECT ON `mysql`.`proc` TO ’b’@’%’ |+----------------------------------------------------------------------------------------+3 rows in set (0.00 sec)

至此,對于Mysql中以另的用戶修改其它人定義的存儲過程權限也就非常的顯白了;

如果不是以另一個用戶身份調用存儲過程,可以使用root權限修改存儲過程的定義者; 這樣就等于linux里的所有者權限變更了;

update mysql.proc set DEFINER=’b’@’%’ WHERE NAME=’proc_cs’ AND db=’OTO3’;

到此這篇關于Mysql修改存儲過程相關權限問題的文章就介紹到這了,更多相關Mysql 存儲過程權限內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线亚洲人成| 日韩伦理在线一区| 精品高清久久| 国产精品高潮呻吟久久久久| 青青草国产成人99久久| 热久久久久久| 亚欧成人精品| 国产精品九九| 日韩1区2区日韩1区2区| 日本精品在线播放| 极品av在线| 日本美女一区| 91中文字幕精品永久在线| 精品久久网站| 视频一区中文字幕国产| 日韩福利视频一区| 日韩精品免费一区二区夜夜嗨 | 亚洲开心激情| 精品国产黄a∨片高清在线| 国产精品扒开腿做爽爽爽软件| 国产精品白浆| 日韩精品一卡| 亚洲欧美日韩专区| 国产精品久久久久久久久久妞妞| 国产欧美日韩影院| 99pao成人国产永久免费视频 | 亚洲美女久久精品| 欧美aa国产视频| 欧美日韩夜夜| 在线亚洲自拍| 中文字幕中文字幕精品| 国产美女久久| 精品国模一区二区三区| 日本精品久久| 久久不见久久见免费视频7| 风间由美中文字幕在线看视频国产欧美| 97精品国产| 亚洲免费精品| 久久一区亚洲| 日本久久黄色| 欧美午夜三级| 成人污污视频| 亚洲精品电影| 欧美日韩一区二区三区四区在线观看 | 99在线精品视频在线观看| 日韩三级一区| 超碰在线99| 亚洲一区二区三区在线免费| 精品黄色一级片| 中文在线不卡| 久久黄色影视| 欧美在线观看视频一区| 福利视频一区| 亚洲一区国产| 精品国产中文字幕第一页| 欧美精品一区二区三区精品| 91成人在线精品视频| 天堂av在线| 日韩国产91| 欧美中文一区二区| 国产精品欧美三级在线观看| 久久精品国产68国产精品亚洲| 日韩高清不卡一区| 免费久久精品| 国产精品地址| 综合国产精品| 久久久人人人| 国产精品xvideos88| 99亚洲视频| 97精品在线| 亚洲91在线| 久久亚洲国产| 精品国产一区二区三区性色av| 99视频精品| 伊人网在线播放| 日本午夜精品久久久久| 国产专区一区| 国精品产品一区| 日韩中文av| 激情91久久| a天堂资源在线| 国产精品亚洲二区| 亚洲三级网址| 婷婷久久一区| 国产一区二区三区网| 性欧美精品高清| 日韩av福利| 超碰在线99| 麻豆国产精品视频| 国产欧美日韩在线观看视频| 亚洲成人精选| 国产美女高潮在线观看| 亚洲人成毛片在线播放女女| 欧美天堂视频| 麻豆中文一区二区| 天堂av一区| 亚洲一区二区三区四区五区午夜 | 久久精品国产一区二区| 青青草视频一区| 爽好多水快深点欧美视频| 久久国产中文字幕| 中文字幕人成乱码在线观看 | 伊人影院久久| re久久精品视频| 超碰超碰人人人人精品| 精品高清久久| 国产伦乱精品| 欧美日韩一区二区三区不卡视频| 亚洲尤物av| 中文字幕亚洲精品乱码| 中文日韩欧美| 久久国产福利| 中文在线不卡| 蜜桃一区二区三区在线| 91久久亚洲| 亚洲精品小说| 日韩午夜av在线| 亚洲国产成人精品女人| 99视频在线精品国自产拍免费观看| 婷婷综合五月| 在线视频日韩| 91精品1区| 亚洲欧美日韩精品一区二区| 亚洲免费精品| 日韩精品一级中文字幕精品视频免费观看 | 国产高清久久| 欧美精选一区二区三区| 五月天久久网站| 欧美一区二区性| 国产视频久久| 一区二区高清| 日韩精品免费视频人成| 日韩高清二区| 国产精品videossex久久发布| 国产精品大片免费观看| 精品国产中文字幕第一页| 超碰成人av| 欧美jjzz| 日韩中文字幕91| 日本 国产 欧美色综合| 日韩三级久久| 你懂的网址国产 欧美| 久久精品国产福利| 欧美激情另类| 久久九九国产| 老牛影视一区二区三区| 日韩**一区毛片| 国产精品99久久免费| 国产中文欧美日韩在线| 亚洲a一区二区三区| 国产亚洲午夜| 日韩黄色av| 精品国产亚洲一区二区三区在线 | 精品国产一级| 麻豆精品蜜桃| 亚洲免费中文| 日韩高清国产一区在线| 91综合网人人| 性欧美精品高清| 欧美激情麻豆| 亚洲高清毛片| 日韩高清一区在线 | 免费国产自久久久久三四区久久 | 美国三级日本三级久久99| 国产日韩亚洲| 欧洲一级精品| 中国女人久久久| 久久成人av| 91超碰国产精品| 国产精品毛片久久久| 久久精品免费一区二区三区| 亚州精品视频| 色一区二区三区四区| 欧美日韩日本国产亚洲在线| 91精品国产自产在线丝袜啪| 精品久久久久中文字幕小说| 久久精品国产亚洲夜色av网站| 在线日韩成人| 欧产日产国产精品视频| 亚洲午夜国产成人| 欧美精品成人| 久久不射中文字幕| 美腿丝袜亚洲一区| 国产99久久| 国产精品一区二区精品| 亚洲精品一区三区三区在线观看| 蜜桃av一区二区在线观看| 精品国产不卡一区二区| 亚洲我射av| 成人av三级| 少妇精品久久久| 日韩精品一卡| 欧美国产中文高清| 美女久久网站| 高清av一区| 亚洲精品美女91| 久久中文字幕av| 久久精品国产99国产| 蜜桃视频第一区免费观看| 久久久精品网|