Sql-Server

MSSQL 中架構上的 GRANT CONTROL 有什麼作用?

  • July 19, 2019

我正在使用 SQL Server 2016 進行這些測試。

以下不允許我在模式 S 中為使用者 U 創建表

USE [D];
GRANT CONTROL ON SCHEMA :: [S] TO [U];

但這確實:

USE [D]
GRANT ALTER ON SCHEMA :: [S] TO [U];
GRANT CREATE TABLE TO [U];

如果您必須執行這兩個附加命令以允許使用者在特定模式中創建表,那麼 GRANT CONTROL 應該做什麼?

這個描述很好,但是在執行命令之前和之後,我可以執行什麼樣的案例來確認(成功或失敗)GRANT CONTROL 命令在物理上影響了使用者在使用和不使用此模式的數據庫上的安全性?

https://blogs.msdn.microsoft.com/lcris/2009/08/11/basic-sql-server-security-concepts-ownership-control-take-ownership/

CONTROL 權限: CONTROL 權限可用於輕鬆地將實體的所有權限授予某個主體。這是實體所有權之後的下一個最好的事情,但它沒有所有權那麼強大。主要區別在於,仍然可以拒絕 CONTROL 的被授予者對該實體的某些其他權限。例如,我可以在一個表上被授予 CONTROL,同時我可以在該表上被拒絕 SELECT,從而阻止我從中選擇 - 這永遠不會發生在所有者身上,因為不能授予或拒絕所有者權限.

要查看CONTROL架構為您帶來了什麼,請在沒有任何權限的情況下創建一個測試使用者,CONTROL向其授予架構並檢查他擁有哪些權限:

create user test;
grant control on schema::dbo to test;

execute as user = 'test';
select *
from sys.fn_my_permissions('dbo', 'schema');
revert;

這是您將得到的:

在此處輸入圖像描述

如果您願意,CREATE TABLE您應該打開 BOL 文章CREATE TABLE (Transact-SQL)並向下滾動到 PERMISSIONS:

在此處輸入圖像描述

現在您看到,即使您的表不應該包含 CLR 使用者定義類型的列,您仍然需要CREATE TABLE授予使用者權限以使他能夠創建表。

測試使用者已經ALTER SCHEMA隱含CONTROL在模式上,但CREATE TABLE應該被授予(以及REFERENCE在 CLR 使用者定義類型的情況下的權限)。

CONTROL授予 SQL Server 中“安全”對象(例如數據庫等)的神一樣的權限。

https://docs.microsoft.com/en-us/sql/relational-databases/security/permissions-database-engine?view=sql-server-2017

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