2011年12月20日 星期二

[SQL].stored procedure 拒絕 EXECUTE 權限

重新安裝系統, db user 只開放 data_reader + data_writer 權限, 所以一執行 stored procedure 就掛掉, 錯誤訊息如下:
--------------------------
結構描述 'dbo',資料庫 'myDatabase',物件 'sp_myStoredProcedure' 拒絕 EXECUTE 權限。


(方案1) 懶人解決辦法:
--------------------------
1. 建立新的 Role. (例如: myDbUserRole)
2. 設定 myDbUserRole 是某一個 database 的 dbo.
3. 設定登入的 userid 屬於該 role.


(方案2) 比較花時間的建議的解決辦法:
--------------------------
1. 建立新的 Role. (例如: myDbUserRole)
2. 設定 myDbUserRole 是某一個 database 的 dbreader + dbwriter.
3. 針對要允許的 物件 開放應該給予的權限, 可能需要設定的物件分別有:
3.1 stored procedure
3.2 function
3.3 view

權限給太多 = 出事時資料會被偷走, 或系統會有被hack 風險.
權限給太少 = 程式三不五十會出錯, 因為權限不夠...


結論:
--------------------------
如果您的系統略重要, 或會被外部的複雜的 internet access, 請使用方案2.
應急(或偷懶)的話請使用方案1.



相關文章:
--------------------------
google search: GRANT EXECUTE ON sp_columns

create role:
http://65.55.20.225/zh-tw/library/ms187936.aspx

資料庫層級角色:
http://65.55.20.225/zh-tw/library/ms189121.aspx

認識 資料庫層級角色(Database Role)
http://maxtellyou.blogspot.com/2011/12/database-role.html

沒有留言:

張貼留言

Facebook 留言板