若使用root
使用者來建立乙個儲存過程 ,然後賦予另乙個使用者此儲存過程的執行許可權,則此使用者將可以進行一些root
賬號才可以進行的操作。但是這些操作是預先被定義在儲存過程裡面的。
比如root
在test
資料庫建立了乙個讀取檔案的儲存過程readf:
?
1
2
3
4
5
6
7
use test;
delimiter //
create
procedure
readf(f
varchar
(100))
begin
select
load_file(f);
end
//
delimiter ;
然後使用乙個沒有file許可權但是有execute
許可權的賬號來呼叫這個儲存過程,擁有execute
許可權才可以呼叫儲存過程:
?
1
call test.readf(
'c:\\boot.ini'
)
可以發現檔案照樣被讀出來了。。利用?
1drop
procedure
readf;
來刪除這個儲存過程
下面這段**也許可以說明一些什麼:
?
1
2
3
4
5
6
7
use test;
delimiter //
create
procedure
whoami()
begin
select
concat(
'user():'
,
user
())
as
'whoami'
union
select
concat(
'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
*
from
mysql.proc
-- (mysql中的函式就儲存在mysql.func表裡面)預設只有root使用者才可以查詢。
2.?1
select
routine_schema,routine_name,definer,routine_definition
from
information_schema.routines;
--誰都可以查
3.?1
show
procedure
status
--這個只有當當前賬號有execute許可權的時候,才能夠列出儲存過程。如果擁有全域性的execute許可權,就可以看到所有的儲存過程,如果只擁有當前庫的execute許可權,就只能看到當前庫裡面的儲存過程。
sql server 05得到使用者自定義儲存過程:
?
1
select
[
name
]
from
sys.all_objects
where
[type]=
'p'
and
charindex(
'sp'
,[
name
])<>1
and
charindex(
'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...