亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL存儲過程的權限問題小結

2024-07-25 19:08:17
字體:
來源:轉載
供稿:網友

MySQL的存儲過程,沒錯,看起來好生僻的使用場景。問題源于一個開發同學提交了權限申請的工單,需要開通一些權限。

本來是一個很正常的操作,但在我來看是比較著急且緊迫的,說來慚愧,忙著方向規劃和開發的事情,這個基礎的操作功能竟然給忽略了,所以看到目前的一些實現方式,還是希望能夠做一些細小的事情把這些重復性的工作給解放了。

當然我決定把一些基礎性的工作接過來,一方面是給同事減壓,另一方面是在做一個完整的體驗,因為很多需求和痛點通過實踐是能夠很容易捕捉到重點的,如果我覺得不合理,那么這個過程中勢必會有一些改進的地方。比如部署安裝,比如權限開通。數據庫的權限開通就是一個相對典型的案例,而存儲過程的權限開通甚至都有點讓人懷疑人生了。

問題的場景還是很基礎的,開發同學需要開通一些基礎的權限,在標記權限的時候聲明需要增刪改查的權限,還有DDL的權限,比如drop,alter,create等等。看到這里,我就感覺不太妥了,什么樣的操作竟然需要這么大的權限呢。

簡單聲明了下立場,開發同學的想法是能夠方便管理,于是乎我就直接招過去了,簡單溝通下,其實發現他們的需求場景還是很常規的,他們需要動態創建一些日表,那么需要create權限在評估之后是可以給與的,而對于一般的用戶而言,create的權限是不建議開放的,主要的出發點就是能夠對SQL進行一些基本的審核,哪怕是人工審核還是平臺審核都是一個需要的過程。所以溝通了一圈發現,開通的權限就可以迅速裁剪,對他們而言,修改存儲過程的邏輯也是需要的,因為在一些特定的場景下,他們對邏輯的控制希望能夠更加靈活。

好了,基礎的背景介紹完了。賦予基本的表的權限,賦予存儲過程的權限,存儲過程的這個地方需要注意一個重要的點是SQL SECURITY,默認創建是definer,如果需要開放給其他的用戶調用,則建議是設置為invoker.

所以很簡單的一句:

grant execute,alter procedure on xxx.xxx to xxx@'xxxx'; 

但是很不幸的,開發同學反饋,他們通過SQLyog或者是Navicator打開的時候,竟然看不到存儲過程的內容。

因為我們沒有select procedure或者view procedure的權限,所以我們幾乎再無從干預了。

使用命令行的方式能夠復現出這個問題:

mysql,存儲過程,權限,存儲過程權限

沒有存儲過程的實質性內容。在那兒折騰了好一會,發現是個老問題了,10多年前的老問題了。

https://bugs.mysql.com/bug.php?id=20235

問題的解決其實很簡單,就是需要這樣一句:

grant select on mysql.proc to xxxx@'xxxx'即可 

所以細粒度的權限控制就是這么糾結,但是確實有效。

比如我們舉一反三一下,我們知道MySQL里的all privileges算是一個很大的權限,但是里面包含多少種權限,可能我們沒有清晰的概念。

我們就完全可以通過細粒度的權限控制來反推。

比如創建一個用戶,賦予all privileges的權限。

mysql> grant all privileges on test.* to 'jeanron'@'%' identified by 'jeanron100'; Query OK, 0 rows affected, 1 warning (0.00 sec) 

包含的權限如下:

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

我們做一下收縮。

mysql> revoke insert on test.* from jeanron@'%'; Query OK, 0 rows affected (0.00 sec) 喏,all privileges的權限就現出原形了。mysql> show grants for jeanron; | Grants for jeanron@% +------------------------------------------------------------------------------------------------------ | GRANT USAGE ON *.* TO 'jeanron'@'%' | GRANT SELECT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `test`.* TO 'jeanron'@'%' | 

所以在上面的問題中,其實如果select on *.*其實已經包含了我們需要的細粒度權限mysql.proc,如果要抽絲剝繭,基本就是這樣的套路。

補充:下面看下mysql創建存儲過程權限問題

首先,在mysql存儲過程出現的同時,用戶權限也增加了5種,其中和存儲過程有關的權限有 三種:

  • ALTER ROUTINE 編輯或刪除存儲過程
  • CREATE ROUTINE 建立存儲過程
  • EXECUTE 運行存儲過程

在使用GRANT創建用戶的時候分配這三種權限。 存儲過程在運行的時候默認是使用建立者的權限運行的。

需要注意的是在一個用戶擁有建立存儲過程的權限時,如果其沒有對于select、update或delete等權限的話,雖然操作數據的存儲過程可以建立,但調用存儲過程的話仍是無法成功的,會返回權限錯誤,就算擁有運行存儲過程的權限也一樣。所以,如果有人給你建立了一個沒有select、update、delete權限只有CREATE ROUTINE權限的用戶,罵他吧,他是故意的。

當然這樣的用戶建立的存儲過程倒并不是完全不能使用,創建存儲過程中有一個特征子句可以讓存儲過程使用運行者的權限,在建立存儲過程后只要加上SQL SECURITY INVOKER特征子句就可以了。

如下。

 CREATE PROCEDURE p() SQL SECURITY INVOKER 這樣的話就可以分配兩批人,一批給與創建存儲過程的權限,作為開發者,一批給與運行存儲過程和select、update、delete權限,作為測試者。(腦筋秀逗了) 有了這種權限分配,mysql的安全性完全不需要在功能層去保護了,我通過root用戶建立的存儲過程,但是在功能層用一個只擁有運行存儲過程權限的用戶來調用。那么,你就算從功能層上得到數據庫的用戶名和密碼,并且模擬了ip,也不能得到你想要的任何東西。 有了權限,我們可以放心大膽的使用存儲過程,不用擔心安全問題了。

總結

以上所述是小編給大家介紹的MySQL存儲過程的權限問題小結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精视频免费在线久久完整在线看| 成人亲热视频网站| 国产美女被下药99| 午夜欧美大片免费观看| 国产精品欧美日韩一区二区| 日韩午夜在线视频| 91免费精品国偷自产在线| 8090成年在线看片午夜| 中日韩美女免费视频网站在线观看| 欧美成人精品激情在线观看| 亚洲国产成人久久| 欧美激情2020午夜免费观看| 久久影视电视剧免费网站清宫辞电视| 亚洲精品欧美日韩| 成人激情在线播放| 97精品国产97久久久久久| 欧美视频一区二区三区…| 亚洲精品色婷婷福利天堂| 91精品视频免费观看| 夜色77av精品影院| 欧美日韩亚洲精品内裤| 久久人人爽亚洲精品天堂| 91性高湖久久久久久久久_久久99| 日本欧美国产在线| 欧美在线一区二区视频| 日本视频久久久| 国产精品av在线播放| 2019亚洲日韩新视频| 中文字幕久久亚洲| 国产精品久久久久久久久男| 国产丝袜一区二区三区免费视频| 欧美亚洲第一页| 亚洲精品视频网上网址在线观看| 日本高清不卡在线| 成人在线免费观看视视频| 欧美黑人巨大xxx极品| 亚洲va男人天堂| 韩国美女主播一区| 日韩中文av在线| 国产精品一区二区三区久久久| 亚洲精品中文字幕有码专区| 亚洲人成网在线播放| 97av在线视频免费播放| 91亚洲国产成人精品性色| 成人欧美在线观看| 亚洲精品国产免费| 国产精品久久久久久久一区探花| 久久99亚洲精品| 不卡在线观看电视剧完整版| 亚洲成人精品视频在线观看| 亚洲自拍偷拍色图| 国产精品美女主播在线观看纯欲| 57pao成人国产永久免费| 国产精品丝袜视频| 国产精品一区二区三区在线播放| 成人国内精品久久久久一区| 亚洲天堂日韩电影| 国产视频观看一区| 91禁外国网站| 亚洲欧美另类国产| 亚洲欧美国产va在线影院| 亚洲欧美另类在线观看| 色综合男人天堂| 97视频免费观看| 色久欧美在线视频观看| 亚洲伊人久久大香线蕉av| 88国产精品欧美一区二区三区| 午夜精品免费视频| 亚洲最新av在线网站| 亚洲欧美综合精品久久成人| 成人免费视频a| 中文字幕自拍vr一区二区三区| 欧美激情亚洲国产| 国产精品v日韩精品| 2020欧美日韩在线视频| 78m国产成人精品视频| 国产亚洲人成a一在线v站| 最新国产精品亚洲| 欧美日韩中文字幕日韩欧美| 色在人av网站天堂精品| 亚洲男人天堂网| 欧美精品成人91久久久久久久| 韩曰欧美视频免费观看| 日本精品久久久久影院| 亚洲专区国产精品| 亚洲国产成人久久综合| 国产一区视频在线播放| 欧美性做爰毛片| 亚洲国产小视频在线观看| 免费av一区二区| 91天堂在线视频| 黑人巨大精品欧美一区二区一视频| 亚洲国产精彩中文乱码av| 日本精品久久电影| 精品人伦一区二区三区蜜桃网站| 成人夜晚看av| 26uuu亚洲伊人春色| 亚洲free性xxxx护士hd| 亚洲欧美精品伊人久久| 亚洲激情 国产| 国产成人精品a视频一区www| 97视频在线观看网址| 欧美交受高潮1| 在线电影欧美日韩一区二区私密| 91av在线精品| 国产福利视频一区二区| 久久综合电影一区| 北条麻妃99精品青青久久| 欧美激情视频一区二区| 伊人亚洲福利一区二区三区| 日韩欧美高清在线视频| 成人免费福利在线| 精品电影在线观看| 欧美成人免费播放| 亚洲成人精品视频| 国产女人18毛片水18精品| 国产欧美一区二区三区久久| 免费91麻豆精品国产自产在线观看| 97国产精品人人爽人人做| 免费av一区二区| 久久免费少妇高潮久久精品99| 亚洲国产精品va| 日韩在线免费观看视频| 国产精品女主播视频| 日韩欧美国产黄色| 国产香蕉精品视频一区二区三区| 国产亚洲日本欧美韩国| 国产精品久久久久久中文字| 亚洲视频网站在线观看| 国产精品一区久久久| 91久久久精品| 亚洲人在线视频| 欧美性xxxx极品hd欧美风情| 91tv亚洲精品香蕉国产一区7ujn| 亚洲无亚洲人成网站77777| 在线观看久久久久久| 日韩av网站导航| 日韩电影中文字幕在线观看| 成人免费视频xnxx.com| 欧美激情久久久久久| 岛国av一区二区三区| 欧美体内谢she精2性欧美| 美女av一区二区三区| 91网站免费看| 久久久国产精品x99av| 亚洲国产日韩一区| 亚洲精品美女久久久久| 2019中文字幕在线免费观看| 欧美激情极品视频| 一区二区欧美久久| 色综合老司机第九色激情| 国产极品jizzhd欧美| 亚洲欧美一区二区激情| 亚洲自拍小视频免费观看| 日韩欧美成人区| 久热精品视频在线观看一区| 另类色图亚洲色图| 欧美国产在线电影| 国产69精品99久久久久久宅男| 国产成人精品国内自产拍免费看| 午夜免费在线观看精品视频| 九九热视频这里只有精品| 久久福利网址导航| 成人久久18免费网站图片|