在我的 .NET WinForms 應用程式(在 Visual Studio 解決方案中)中,我在解決方案中的 SQL Server 專案中有表和存盤程序,因此我可以輕松地將我的架構保持在版本控制之下,并且我可以成功使用“發布”功能將架構更改部署到開發資料庫。
我正準備部署我的應用程式,并要求用戶在將新應用程式和資料庫架構更改推廣到生產公司范圍之前,在他們的 PC 上針對開發資料庫試用該應用程式。
我發現應用程式正在拋出SqlException. 我已經設法將其追蹤到新存盤程序的權限(顯然,作為存盤程序的所有者,我沒有這個問題)。
我可以通過授予存盤程序的權限來手動更正此問題,如下所示
GRANT EXECUTE ON [dbo].[<tablename(s)>] TO DatabaseUsers
...但我最理想的做法是將其包含在受版本控制的 SQL Server 專案中的存盤程序的定義中。
我嘗試將上述陳述句添加到 SQL Server 專案中存盤程序定義(如下)的末尾,部署腳本的輸出似乎顯示了正在執行的命令,但是當它更新存盤程序時,它不會t 觸摸權限。
-- Snipped 50 lines above for brevity
OR c.name LIKE @search
OR CAST(it.id AS VARCHAR) LIKE @search
OR ig.name LIKE @search
ORDER BY it.id
END
GRANT EXECUTE ON [dbo].[search_items_allfields] TO DatabaseUsers
GO
我也嘗試在上述定義中GO的陳述句之前添加一個附加GRANT項,但是我無法使用發布腳本,因為它由于無法決議組“DatabaseUsers”而拒絕運行(沒有 GO,它仍然無法解決它,但很高興運行它)。
uj5u.com熱心網友回復:
除了GO之前的GRANT(因此它不是程序的一部分)之外,您還需要將角色的腳本添加到您的專案中以決議參考:
CREATE ROLE DatabaseUsers;
GO
當然,您還需要添加角色成員。我建議您單獨管理角色成員,而不是作為 SSDT 專案的一部分,因為它們會因環境而異,而且許多組織都有單獨的流程來管理資料庫訪問安全性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/521480.html
