none
Stored Procedure權限控管 RRS feed

  • 問題

  • 請問若我有10幾個資料庫,每個資料庫各有10幾個供使用者呼叫的sp,

    要怎麼設定登入帳戶權限才能讓他僅能擁有執行使用者sp(但不能修改)和讀取DB的權限?

    DB權限的部分和一個sp一個sp進行設定的方法我會,主要是不知道怎麼整批設定sp的權限,

    參考過下面這篇文章  http://blog.roodo.com/zaknafein/archives/7947213.html

    但還是試不出來,想請教一下,謝謝!

    2010年7月22日 上午 09:32

解答

  • 整批設定要到 SQL Server 2005 之後,開始提供的新款「角色」才能一次搞定,在 SQL Server 2005 之前,只能逐一設定,但可撰寫內容類似下面的 T-SQL,把 <使用者名稱> 改成您實際的使用者名稱,執行該 T-SQL,並將執行結果存檔成 .sql,然後再執行該存檔後的 .sql:

    SELECT 'GRANT EXEC ON ' + 
    	QUOTENAME(ROUTINE_NAME) + ' TO <使用者名稱>' FROM INFORMATION_SCHEMA.ROUTINES
    WHERE OBJECTPROPERTY(OBJECT_ID(ROUTINE_NAME),'IsMSShipped') = 0
    

    ☞ 這裡是「免費的討論區」付費支援服務請造訪 此處享受尊榮服務
    如果回覆對您有幫助,請記得按下標示為解答」
    在本討論區使用正體中文(即繁體中文),是對參與的朋友的一種尊重,因此請用本討論區的語言:正體中文。
    2010年7月22日 上午 10:29
    版主

所有回覆

  • 整批設定要到 SQL Server 2005 之後,開始提供的新款「角色」才能一次搞定,在 SQL Server 2005 之前,只能逐一設定,但可撰寫內容類似下面的 T-SQL,把 <使用者名稱> 改成您實際的使用者名稱,執行該 T-SQL,並將執行結果存檔成 .sql,然後再執行該存檔後的 .sql:

    SELECT 'GRANT EXEC ON ' + 
    	QUOTENAME(ROUTINE_NAME) + ' TO <使用者名稱>' FROM INFORMATION_SCHEMA.ROUTINES
    WHERE OBJECTPROPERTY(OBJECT_ID(ROUTINE_NAME),'IsMSShipped') = 0
    

    ☞ 這裡是「免費的討論區」付費支援服務請造訪 此處享受尊榮服務
    如果回覆對您有幫助,請記得按下標示為解答」
    在本討論區使用正體中文(即繁體中文),是對參與的朋友的一種尊重,因此請用本討論區的語言:正體中文。
    2010年7月22日 上午 10:29
    版主
  • 您提供的語法是可以解決,謝謝。

    但若我是用SQL 2008,該怎麼設定『角色』呢?

    2010年7月22日 下午 01:16
  • CREATE ROLE sp_executor
    GRANT EXECUTE TO sp_executor
    
    參考資料:http://msdn.microsoft.com/zh-tw/library/ms187936.aspx

    ☞ 這裡是「免費的討論區」付費支援服務請造訪 此處享受尊榮服務
    如果回覆對您有幫助,請記得按下標示為解答」
    在本討論區使用正體中文(即繁體中文),是對參與的朋友的一種尊重,因此請用本討論區的語言:正體中文。
    2010年7月22日 下午 01:29
    版主