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

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

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

瀏覽:33日期: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久久,三上悠亚国产精品一区二区三区
久久一区精品| 国产精品.xx视频.xxtv| 麻豆国产精品一区二区三区| 蜜臀91精品一区二区三区| 99在线精品视频在线观看| 欧美在线观看视频一区| 极品日韩av| 另类国产ts人妖高潮视频| 中文字幕一区二区av| 日本亚洲不卡| 久久精品资源| 1000部精品久久久久久久久| 成人看片网站| 国产视频一区三区| 日本欧美一区二区在线观看| 国产精品美女久久久久久不卡 | 日韩精品一区二区三区中文 | 麻豆91在线播放| 久久精品国产999大香线蕉| 成人午夜毛片| 亚洲免费观看| 久久精品xxxxx| 久久高清精品| 在线看片日韩| 精品国产一级| 免播放器亚洲一区| 美腿丝袜在线亚洲一区| 国产精品v日韩精品v欧美精品网站| 国产91欧美| 亚洲三级精品| 中文字幕在线视频网站| 一级成人国产| 另类中文字幕国产精品| 亚洲精品伊人| 国产精品99免费看| 欧美激情 亚洲a∨综合| 欧美精品一二| 精品理论电影在线| 视频一区欧美精品| 美女福利一区二区三区| 日韩一区二区三区高清在线观看| 精品国产一区二区三区2021| 不卡在线一区二区| 成人在线视频中文字幕| 日本h片久久| 日韩午夜电影| 成人小电影网站| 国产伦精品一区二区三区千人斩| 91成人超碰| аⅴ资源天堂资源库在线| 久久国产人妖系列| 热久久久久久| 日韩精品亚洲专区在线观看| 亚洲一级高清| 91精品韩国| 精品久久91| 日韩**一区毛片| 精品一区亚洲| 日韩在线观看一区| 国产婷婷精品| 亚洲综合欧美| 99在线|亚洲一区二区| 久久久国产精品一区二区中文| 精品视频久久| 国产成人精品福利| 色婷婷综合网| 91精品韩国| 亚州av乱码久久精品蜜桃| 香蕉成人av| 激情欧美一区二区三区| 国产亚洲综合精品| 在线精品一区| 日韩在线网址| 国产精品一卡| 色偷偷色偷偷色偷偷在线视频| 国产精品13p| 香蕉国产精品| 日韩欧美中文字幕电影| 国产精品尤物| 精品国产乱码久久久久久1区2匹 | 亚洲激情中文| 日本一区二区免费高清| 欧美在线精品一区| 亚洲精品在线国产| 麻豆精品视频在线观看| 在线看片国产福利你懂的| 精品黄色一级片| 日韩精品首页| 亚洲精品福利| 老司机精品视频网| 91超碰国产精品| 国产欧美成人| 亚洲激情中文在线| 国产欧美视频在线| 激情久久久久久| 国产欧美日韩视频在线| 亚洲成人一区在线观看| 91亚洲无吗| 亚洲特级毛片| 国产经典一区| 亚洲一区欧美二区| 欧美一区精品| 丝瓜av网站精品一区二区 | 日韩视频一区| 国产精品日韩精品中文字幕| 亚洲午夜电影| 国产91在线播放精品| 人人爽香蕉精品| 福利一区二区| 国产精品嫩模av在线| 婷婷亚洲综合| 欧美国产小视频| 久久国内精品视频| 激情综合网站| 四虎成人av| 麻豆精品蜜桃视频网站| 亚洲免费毛片| 伊人影院久久| 亚洲午夜精品久久久久久app| 国产一区二区三区四区五区| 18国产精品| 综合亚洲色图| 国产模特精品视频久久久久| 91精品国产成人观看| www.九色在线| 日本不卡免费高清视频在线| 国产精品久久久久久av公交车| 一区二区三区四区在线观看国产日韩 | a国产在线视频| 精品视频在线观看网站| 久久国产欧美日韩精品| 日日夜夜免费精品| 日韩综合一区二区| 日本天堂一区| 国产精品视频3p| 麻豆精品视频在线| 精品三级av在线导航| 精品三级av| 国产成人免费| 欧美日韩免费观看视频| 国产精品777777在线播放 | 蜜桃av一区二区在线观看| 另类中文字幕国产精品| 日韩av首页| 西西人体一区二区| 日日摸夜夜添夜夜添国产精品| 欧美永久精品| 福利视频一区| 亚洲深夜av| 日韩精品福利一区二区三区| 日本少妇一区二区| 成人亚洲一区二区| 国产不卡人人| 亚洲作爱视频| 美女视频免费精品| 欧美影院三区| 日本午夜精品视频在线观看| 狂野欧美性猛交xxxx| 久久精品一区二区不卡| 免费在线成人网| 久久精品二区亚洲w码| 久久理论电影| 国产精品白浆| 蜜桃一区二区三区| 国产精品nxnn| 国产视频一区三区| 国产精品片aa在线观看| 国产精品a级| 乱人伦精品视频在线观看| 欧美韩一区二区| 国产亚洲一区在线| 日韩国产欧美| 国产九一精品| 亚洲欧美成人综合| 91综合网人人| 欧美国产先锋| 中文字幕成人| 日韩欧美二区| 欧美1区2区3| 日韩欧美中文字幕在线视频| 电影天堂国产精品| 久久精品三级| 亚洲激情婷婷| 久久人人99| 人人草在线视频| 精品久久网站| 国产精品99久久免费观看| 亚洲精品在线a| 香蕉成人久久| 日韩一区二区免费看| 今天的高清视频免费播放成人| 国产成人1区| 国产精品麻豆久久| 久久精品五月| 成人一区不卡| 日韩一区自拍| 久久九九精品| 欧美成人a交片免费看| 美女视频黄久久| 精品少妇一区|