Sql-Server

如何授予對我的 SQL Server 2008 數據庫的只讀訪問權限?

  • January 10, 2011

我正在嘗試向我的 SQL Server 2008 R2 數據庫上的使用者帳戶授予只讀訪問權限(換句話說:僅選擇查詢)。我必須授予使用者哪些權利才能完成這項工作?

我已經在伺服器和數據庫本身上嘗試了幾種權限組合,但在所有情況下,使用者仍然可以執行更新查詢,或者他根本無法執行任何查詢(甚至不能選擇)。我總是收到的錯誤消息是

伺服器主體“foo”無法在目前安全上下文下訪問數據庫“bar”。

謝謝你的幫助,

阿德里安

我通常會按照以下方式做一些事情:

USE [test]
GO
CREATE USER [ReadOnlyUser] FOR LOGIN [LOCALNT\ReadOnlyNTUser]
GO
EXEC sp_addrolemember N'db_datareader', N'ReadOnlyUser'

第一步是創建一個只有db_datareader 權限的使用者。

但不要止步於此。如果這是一個可以執行任何他們想要的 SELECT 查詢的真實人的登錄名,那麼他們仍然會給數據庫帶來很多問題。這裡的這個常見問題甚至不是惡意使用者——只是對您的索引、性能調整和高效查詢編寫一無所知的人。以這種方式在 sql 框上創建拒絕服務情況非常容易。

我只知道如何在每個查詢的基礎上執行此操作,但在這里至少我知道幾個選項:

  1. 限制通過SET ROWCOUNT返回的記錄。
  2. 使用SET QUERY_GOVERNOR_COST_LIMIT。(請注意,調整這可能很棘手)。

為了強制使用者在他們的查詢中包含這些,過去我使用了一個儲存過程,它在執行提供的查詢之前首先執行適當的 SET(在正確的只讀使用者的上下文中)。

引用自:https://serverfault.com/questions/220671