利用Store Procedure授權一般user執行xp_cmdshell時,碰到權限不足的情形
無意間發現的一個情形,有時我們會透過一個Stored Procedure讓一般user透過SP就
可以執行xp_cmdshell這種高風險的語法,而不是直接給user高權限,某日參考楊
志強老師的文件做類似實作,卻發現照老師的方式居然user在執行SP時還是被認
為權限不足。
情境為當DB的owner不是sa時,我無法讓gust的user可以透過sp去跑xp_cmdshell的功能。
一但我將DB的Owner改成sa後,gust就可以透過sp執行xp_cmdshell成功。不知道
是SQL的安全性設定就是如此嗎?筆記一下。
2016/4/26補充 : 後來發現由於xp_cmdshell位於master資料庫。我們在xpcmdshell這一個User資料庫要透過Stored Procedure的Execute as Owner去執行master的xp_cmdshell時,xpcmdshell資料庫的Owner也必須是master資料庫的db_owner角色的成員。因此如果我們將xpcmdshell的Owner也改成sa後,那兩個DB的Owner皆是sa所以可以Work。如果不想將xpcmdshell資料庫的Owner改為sa的話,另一作法就是將xpcmdshell資料庫的Owner加入到master資料庫的db_owner角色也是可以的。
我是ROCK
rockchang@mails.fju.edu.tw