Sql-Server-2005

如果由 db_datareader 角色訪問,寫入記錄的 SP 會失敗嗎?

  • September 13, 2012

我有一個儲存過程,它可以由在某種 Java/WebSphere 類型平台上執行的應用程序遠端訪問。它需要一個參數,返回一些數據,就是這樣。

最近有一些關於它可能執行緩慢的討論 - 我非常有信心 SP 沒有理由執行緩慢。但是我在數據庫中添加了一個日誌表,並讓 SP 在輸入時寫入它,並在SELECT完成後再次寫入,這樣我就可以看到呼叫需要多長時間。

此更改適用於我的 Windows 身份驗證登錄 - 當我使用遠端應用程序正在使用的應用程序登錄時,它也適用。但是,我是從 .Net 環境而不是 Java 進行連接。

當我更改 SP 進行日誌記錄時,我注意到我正在INSERT進入日誌表的 ID 正在跳躍 - 表明已經發生了失敗的 INSERT - 可能是由遠端應用程序引起的(因為這是唯一使用這個SP)。

應用程序登錄僅具有db_datareader分配給它的角色。我當然已經GRANT編輯EXEC了應用程序登錄。

INSERT是不是因為訪問登錄只有SP,所以SP不能連續db_datareaderINSERT如果是這樣,當我使用相同的登錄時,SP 怎麼會這樣做?

如果同一個使用者同時擁有表和儲存過程(通常是 dbo),則不會檢查權限。這被稱為“所有權連結”。

所以你可以在桌子上有一個拒絕,它不會被檢查。db_datareader 沒有區別:它沒有被檢查。

如果所有者不同(並註意架構的所有者很重要),則需要權限。請參閱上面的 MSDN 範例。

無論如何,您需要通過 TRY/CATCH 或 SQL Profiler 擷取錯誤以確保

根據 Microsoft 的說法(您希望他們知道),只要您已授予 SP 權限,那麼底層權限將通過權限鏈進行排序 - http://msdn.microsoft.com/en-us /圖書館/bb669058.aspx

應該意味著雖然您的使用者可以從數據庫中的任何表中讀取數據,但他們只能通過他們執行的儲存過程向他們寫入數據。

引用自:https://dba.stackexchange.com/questions/24249