成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL存儲過程的權限問題

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

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

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

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

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

[[254500]]

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

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

所以很簡單的一句:

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

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

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

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

 

 

沒有存儲過程的實質性內容。在那兒折騰了好一會,發現是個老問題了,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,如果要抽絲剝繭,基本就是這樣的套路。

責任編輯:武曉燕 來源: 楊建榮的學習筆記
相關推薦

2018-04-18 09:18:44

數據庫MySQL存儲過程

2011-05-16 13:15:55

MySQL存儲字符集

2011-07-14 13:38:34

2010-10-09 17:19:50

mysql存儲過程

2010-09-27 15:58:51

SQL存儲過程

2020-11-26 10:33:44

MySQL存儲函數

2010-06-01 15:09:55

MySQL 存儲過程

2021-10-15 06:43:11

數據庫存儲過程

2010-05-19 14:03:41

MySQL 存儲過程

2010-10-08 16:55:44

MySql存儲過程

2010-10-09 16:26:59

mysql存儲過程

2015-06-29 15:12:09

ORACLE賬號權限用戶權限

2009-01-19 08:59:04

PHP調用MySQL存儲過程MySQLi擴展

2023-07-27 07:03:24

MySQL存儲SQL

2010-10-09 17:08:15

MySQL存儲過程

2010-06-07 15:36:36

MySQL存儲過程

2010-11-22 14:47:22

MySQL存儲過程

2020-11-02 13:24:49

MySQL數據庫存儲

2011-07-20 18:00:15

MySQL數據庫字符集

2017-09-01 21:25:45

MySQL存儲過程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人欧美一区二区三区黑人孕妇 | 国产成人精品999在线观看 | 亚洲不卡av在线 | 91精品国产91久久久久久密臀 | 偷拍自拍网站 | 色婷婷在线视频 | 国产婷婷在线视频 | 国产三区四区 | 国产精品久久久久久久久免费高清 | 亚洲欧美日韩精品 | 精品久久久精品 | 国产这里只有精品 | 观看毛片 | a中文在线视频 | 国产成人免费视频 | 精品国产第一区二区三区 | 国产在线视频99 | 日日干综合 | 久久99一区二区 | heyzo在线| 国产视频一区在线 | 亚洲精品大片 | 一级片在线免费看 | 美女国产 | 日韩精品成人一区二区三区视频 | 日韩精品一区二区三区 | 麻豆av电影网| 久久久久一区 | 综合国产 | 日韩欧美在线观看视频网站 | 一区二区三区四区在线 | 午夜精品久久 | 亚洲精品乱码久久久久久按摩观 | 亚欧性视频 | 一区二区三区四区不卡视频 | 久久蜜桃av一区二区天堂 | 国产精品国产精品国产专区不卡 | 欧美一区二区三区一在线观看 | 91黄在线观看 | 国产精品免费大片 | 成人精品一区二区户外勾搭野战 |