1. 程式人生 > >mysql 建立儲存過程許可權問題

mysql 建立儲存過程許可權問題

在mysql下建立儲存過程,一直提示如下資訊:

剛開始我給該使用者授予create routine許可權,但是還是不能建立,後來才發現在儲存過程中也有select,insert等其他操作,並看到一篇日誌如下

首先,在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,也不能得到你想要的任何東西。 有了許可權,我們可以放心大膽的使用儲存過程,不用擔心安全問題了

我給使用者授權,是指定資料庫的

但是

還是沒有這些許可權

再次授權:

這樣才可以。

一個指定庫,一個沒指定庫,查詢結果就不一樣,而且第二次授權後就可以建立儲存過程了。

如果大家指定原因,歡迎留言,如有不對的地方,歡迎指正。