MYSQL儲存過程的越權執行

2021-09-21 22:28:54 字數 3270 閱讀 1410

若使用root

使用者來建立乙個儲存過程 ,然後賦予另乙個使用者此儲存過程的執行許可權,則此使用者將可以進行一些root

賬號才可以進行的操作。但是這些操作是預先被定義在儲存過程裡面的。

比如root

在test

資料庫建立了乙個讀取檔案的儲存過程readf:

?

1

2

3

4

5

6

7

use test;

delimiter //

createprocedurereadf(fvarchar(100))

begin

selectload_file(f);

end//

delimiter ;

然後使用乙個沒有file許可權但是有execute

許可權的賬號來呼叫這個儲存過程,擁有execute

許可權才可以呼叫儲存過程

?

1

call test.readf('c:\\boot.ini')

可以發現檔案照樣被讀出來了。。利用?

1dropprocedurereadf;

來刪除這個儲存過程

下面這段**也許可以說明一些什麼:

?

1

2

3

4

5

6

7

use test;

delimiter //

createprocedurewhoami()

begin

selectconcat('user():',user())as'whoami'unionselectconcat('current_user():',current_user());

end//

delimiter ;

以root

身份建立這個儲存過程 ,再以root身份來執行

結果是:

+——————————————+

| whoami                                          |

+——————————————+

| user():root@localhost                  |

| current_user():root@localhost  |

+——————————————+

再以ninty賬號來執行這個儲存過程:

+—————————————–+

| whoami                                         |

+—————————————–+

| user():ninty@localhost               |

| current_user():root@localhost |

+—————————————–+

ps:可以通過show grants來看看自己是否有execute

的許可權檢視mysql

中儲存過程的方法:1.?

1select*frommysql.proc-- (mysql中的函式就儲存在mysql.func表裡面)預設只有root使用者才可以查詢。

2.?1

selectroutine_schema,routine_name,definer,routine_definitionfrominformation_schema.routines;--誰都可以查

3.?1

showprocedurestatus--這個只有當當前賬號有execute許可權的時候,才能夠列出儲存過程。如果擁有全域性的execute許可權,就可以看到所有的儲存過程,如果只擁有當前庫的execute許可權,就只能看到當前庫裡面的儲存過程。

sql server 05得到使用者自定義儲存過程:

?

1

select[name]fromsys.all_objectswhere[type]='p'andcharindex('sp',[name])<>1andcharindex('xp',[name])<>1

或者可以查詢sys.procedures,不過聽人說好像因為一些未知的原因,從這裡查出的資料並不全。。

mysql越權 MYSQL儲存過程的越權執行

老早就有人提出來過了,不是什麼新技術,寫在這裡當備忘而已。沒做過多的測試,有些東西也是按我自己的理解說的,有錯誤請指出。若使用比如 use test delimiter create procedure readf f varchar 100 begin select load file f end...

mysql 執行儲存過程的許可權

在應用程式中呼叫儲存過程,出現如下錯誤資訊 test procedure executed failed because driver requires declaration of procedure to either contain a nbegin or n to follow argume...

mysql動態執行儲存過程語句

mssql中動態執行sql語句可以使用exec 函式。mssql中也有類似的函式execute 不過不同的是mysql中動態執行儲存過程語句與mssql還是有區別的 下面寫乙個給大家做參考啊 create procedure sp find pfind varchar 500 begin decla...