SQL Server 2008 資源調控器安全性

iSQlServer發表於2008-12-18

資源調控器使用現有的 SQL Server 安全機制,如身份驗證、許可權級別以及所有權鏈。本主題介紹在配置和使用資源調控器時,為確保解決潛在的安全問題而應當考慮的各個方面。

 注意事項
需要考慮資源調控器設計和實現的下列元素,以確保此功能在使用時儘可能安全:

許可權

資源池和工作負荷組名稱

分類器使用者定義函式

許可權
更改或檢視資源調控器設定需要下列許可權:

若要更改資源調控器配置,使用者需要 CONTROL SERVER 許可權。執行任何資源調控器 DDL 語句時,都會檢查許可權。

若要檢視動態管理檢視提供的活動配置,使用者需要 VIEW SERVER STATE 許可權。

建議為經驗豐富的資料庫管理員授予建立或更改資源調控器配置的許可權。

資源池和工作負荷組名稱
所有資源池和工作負荷組名稱都是公開的。建立池和組時,應確保所選定的名稱不會洩露有關伺服器上執行的應用程式的特性資訊。例如,從工作負荷組 CompanyPayroll 的名稱可一眼看出使用該工作負荷組的應用程式的特性和重要性。

分類器使用者定義函式
分類器使用者定義函式 (UDF) 儲存在 master 資料庫中。

此函式在設計和實現上與 LOGON 觸發器類似,並作為登入過程的一部分在 LOGON 觸發器之後執行。此函式在發出請求的會話的登入上下文中執行,並且分類必須在實際建立會話之前完成。因此,來自分類器函式內部且通常將到達使用者的所有訊息(例如錯誤訊息和來自 PRINT 語句的訊息)會轉移到 SQL Server 錯誤日誌。

注意:
儘管本版本的資源調控器實現架構繫結以限制可以從分類器 UDF 中發出的呼叫,但從該函式返回的所有資料並不一定是安全的。有關詳細資訊,請參閱編寫分類器函式的注意事項。
 


請注意分類器使用者定義函式行為的以下方面:

預設情況下,資源調控器在登入使用者的上下文中作為分類的一部分執行此函式,如果在此函式中指定了 EXECUTE AS,則以指定的使用者身份執行此函式。

當資源調控器作為分類的一部分執行此函式時,不會檢查分類器 UDF 的 EXECUTE 許可權。但是,此函式引用的所有物件都會受到標準的許可權檢查,這可能允許基於所有權鏈來進行訪問。

如果某個函式在資源調控器分類的作用域之外使用,則將該函式註冊為資源調控器分類器將不會影響它的許可權級別。

資源調控器中的所有權鏈

可以依賴預設的基於架構的所有權連結或者使用 EXECUTE AS 來允許單個使用者在資源調控器分類執行時訪問某個架構。下面的程式碼示例和註釋說明了所有權連結在資源調控器中的工作方式。

注意:
下面的示例假定啟用了 SQL 登入名。
 


下面的程式碼建立對 master 具有訪問許可權的架構使用者(SchemaUser1 和 SchemaUser2)。

use master
go

CREATE LOGIN SchemaUser1 WITH PASSWORD='your password here';
CREATE USER SchemaUser1 FOR LOGIN [SchemaUser1];
CREATE LOGIN SchemaUser2 WITH PASSWORD='your password here';
CREATE USER SchemaUser2 FOR LOGIN [SchemaUser2];
go
下面的程式碼建立一個具有預設登入許可權的使用者 (NormalUser1)。

CREATE LOGIN NormalUser1 WITH PASSWORD='your password here';
CREATE USER NormalUser1 FOR LOGIN [NormalUser1];
go
下面的程式碼建立架構(Schema1 和 Schema2)並將它們對映到建立的架構使用者。它還為這些架構建立一個表 (groupTable)。

CREATE SCHEMA Schema1 AUTHORIZATION SchemaUser1
CREATE TABLE groupTable (uname sysname, gname sysname);
CREATE SCHEMA Schema2 AUTHORIZATION SchemaUser2
CREATE TABLE groupTable (uname sysname, gname sysname);
go
下面的程式碼向 groupTable 中新增值。

INSERT Schema1.groupTable VALUES(N'NormalUser1',N'Group1');
INSERT Schema2.groupTable VALUES(N'NormalUser1',N'Group2');
go此時,Schema1 和 Schema2 分別歸 SchemaUser1 和 SchemaUser2 所有。下面的程式碼示例建立一個將用來訪問 Schema1 和 Schema2 的函式。

CREATE FUNCTION Schema1.classifier() RETURNS sysname WITH SCHEMABINDING AS
BEGIN
      DECLARE @n sysname
      SELECT @n = gname FROM Schema1.groupTable WHERE uname = SUSER_NAME()
      SELECT @n = gname FROM Schema2.groupTable WHERE uname = SUSER_NAME()
      RETURN @n
END
go下面的程式碼將前面的函式註冊為分類器 UDF。請注意 SchemaUser1 沒有訪問 Schema2 的許可權。

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION=Schema1.classifier);
ALTER RESOURCE GOVERNOR RECONFIGURE
go為進行測試,嘗試從另一客戶機連線以 NormalUser1 身份登入。開啟 Windows 事件檢視器。您應該會在應用程式日誌中看到一個分類器出錯的條目。NormalUser1 通過所有權連結從 Schema1.classifier 繼承對 Schema1.groupTable 的訪問許可權。但是,Schema1 沒有訪問 Schema2.groupTable 的許可權。

為進行另一測試,為 SchemaUser1 授予對 Schema2.groupTable 的 SELECT 許可權。

GRANT SELECT ON Schema2.groupTable TO SchemaUser1
go以 NormalUser1 身份登入。您會再次在事件日誌中看到一個分類器出錯的條目。出現此錯誤是由於伺服器進行檢查以確定 NormalUser1 是否有 SELECT 許可權,而該許可權不會從 SchemaUser1 繼承。

在下一個程式碼示例中,建立了另一個分類器函式。這一次為登入授予 EXECUTE AS SchemaUser1 許可權。

CREATE FUNCTION Schema1.classifier2() RETURNS sysname WITH SCHEMABINDING, EXECUTE AS 'SchemaUser1' AS
BEGIN
      DECLARE @n sysname
      SELECT @n = gname FROM Schema1.groupTable WHERE uname = SUSER_NAME()
      SELECT @n = gname FROM Schema2.groupTable WHERE uname = SUSER_NAME()
      RETURN @n
END
go

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION=Schema1.classifier2);
ALTER RESOURCE GOVERNOR RECONFIGURE;
go因為新函式執行於 SchemaUser1 的上下文中,並且 SchemaUser1 對 Schema2.groupTable 具有 SELECT 許可權,所以對於 NormalUser1 登入名,Schema1.classifier2() 函式將會成功執行。

再次以 NormalUser1 身份登入並檢視事件日誌中是否有分類器出錯條目。

注意:
因為沒有為 NormalUser1 授予對 Schema1.classifier2 函式的 EXECUTE 許可權,所以 NormalUser1 無法將此函式作為即席查詢執行。
 


有關詳細資訊,請參閱所有權鏈。

測試分類器函式
在使用分類器函式對傳入請求進行分類之前,應該先對它進行測試和優化。效能低劣的函式會由於超時並公開配置資訊而使系統不可用。啟用了資源調控器的情況下可以使用專用管理員連線 (DAC) 來解決分類器函式的問題,因為此連線不進行分類。建議在伺服器上啟用 DAC。有關詳細資訊,請參閱使用專用管理員連線。

注意:
如果沒有 DAC 可用來進行故障排除,則另一個選擇是在單使用者模式下重新啟動系統。單使用者模式不進行分類;但是它使您無法在資源調控器分類器執行時對它進行診斷。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-515839/,如需轉載,請註明出處,否則將追究法律責任。

相關文章