GRANT 系統物件權限 (Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

授與系統物件 (如系統預存程序、擴充預存程序、函數及檢視) 的權限。

Transact-SQL 語法慣例

Syntax

GRANT { SELECT | EXECUTE } ON [ sys. ] system_object TO principal
[ ; ]

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

[ sys. ]

只有在參考目錄檢視和動態管理檢視時,才需要 sys 限定符。

system_object

指定要授與其權限的物件。

principal

指定要對其授與權限的主體。

備註

此語句可用來授與特定預存程式、擴充預存程式、數據表值函式、純量函式、檢視、目錄檢視、相容性檢視、 INFORMATION_SCHEMA 檢視、檢視、檢視、動態管理檢視,以及 SQL Server 所安裝之系統數據表的許可權。 在伺服器的資源資料庫 (mssqlsystemresource) 中,這些系統物件會個別以唯一記錄形式存在。 資源資料庫是唯讀的。 該物件的連結會公開為每個資料庫之 sys 結構描述中的記錄。 可以授與、拒絕及撤銷執行或選取系統物件的權限。

授與執行或選取物件的許可權不一定會傳達使用物件所需的所有許可權。 大部分的物件都會執行需要額外許可權的作業。 例如,EXECUTE授與許可權sp_addlinkedserver的使用者無法建立連結伺服器,除非使用者也是系統管理員固定伺服器角色的成員

預設名稱解析會對資源資料庫解析不合格的程序名稱。 因此,只有在您指定目錄檢視和動態管理檢視時,才需要 sys 限定符。

不支援授與觸發程式和系統對象數據行的許可權。

升級 SQL Server 期間會保留系統對象的許可權。

您必須在 master 資料庫中授與許可權,而且您授與許可權的主體必須是資料庫中的使用者 master 。 也就是說,如果它們是伺服器層級的許可權,您就無法將其授與伺服器主體,只有資料庫主體。

您可以在 sys.system_objects 目錄檢視中看到系統物件。 您可以在 master 資料庫的 sys.database_permissions 目錄檢視中,看到系統物件的權限。

下列查詢會傳回系統物件權限的相關資訊:

SELECT *
FROM master.sys.database_permissions AS dp
INNER JOIN sys.system_objects AS so
    ON dp.major_id = so.object_id
WHERE dp.class = 1 AND so.parent_object_id = 0;
GO

權限

需要 CONTROL SERVER 權限。

範例

A. 授與檢視的 SELECT 許可權

下列範例會授與 SQL Server 登入 Sylvester1 權限,來選取列出 SQL Server 登入的檢視。 然後,此範例會授與檢視使用者未擁有之 SQL Server 登入元數據所需的額外許可權。

USE master;
GO
GRANT SELECT ON sys.sql_logins TO Sylvester1;
GRANT VIEW SERVER STATE to Sylvester1;
GO

B. 授與擴充預存程式的 EXECUTE 許可權

下列範例會對 EXECUTE 授與 xp_readmailSylvester1 權限。

USE master;
GO
GRANT EXECUTE ON xp_readmail TO Sylvester1;
GO