Permissions
如何檢測是否有權限查詢 sys.dm_os_performance_counters?
根據sys.dm_os_performance_counters 文件:
在 SQL Server 上,需要
VIEW SERVER STATE
權限。在 SQL 數據庫高級層上,需要
VIEW DATABASE STATE
數據庫中的權限。在 SQL 數據庫標準層和基本層上,需要伺服器管理員或Azure Active Directory 管理員帳戶。如果你有這些權限,你如何從 T-SQL 中檢查?
最終我們解決了!
- 如果您已連接到 SQL Azure 數據庫,並且數據庫層為高級,請檢查
VIEW DATABASE STATE
權限- 如果您已連接到 SQL Azure 數據庫,並且數據庫層不是高級,請檢查
EXECUTE
權限sys.dm_os_performance_counters
- 否則,請檢查
VIEW SERVER STATE
權限這不是文件的明顯翻譯的一點是,在非高級 Azure SQL 數據庫的情況下,“
EXECUTE
權限”等同於“成為伺服器管理員或 Azure Active Directory 管理員”。sys.dm_os_performance_counters
這只是我們通過反複試驗發現的,並且在我所知道的任何地方都沒有記錄。DECLARE @Result VARCHAR(MAX) SET @Result = '' IF (SERVERPROPERTY('EngineEdition') = 5) BEGIN IF (DATABASEPROPERTYEX(DB_NAME(), 'Edition') = 'Premium') BEGIN IF NOT EXISTS(SELECT 1 FROM sys.fn_my_permissions(NULL, 'DATABASE') WHERE permission_name = 'VIEW DATABASE STATE') SET @Result = 'You do not have VIEW DATABASE STATE permissions for this database.' END ELSE BEGIN IF NOT EXISTS(SELECT 1 FROM sys.fn_my_permissions('sys.dm_os_performance_counters', 'OBJECT') WHERE permission_name = 'EXECUTE') SET @Result = 'You do not have server admin or Azure active directory admin permissions.' END END ELSE BEGIN IF NOT EXISTS(SELECT 1 FROM sys.fn_my_permissions(NULL, 'SERVER') WHERE permission_name = 'VIEW SERVER STATE') SET @Result = 'You do not have VIEW SERVER STATE permissions within this instance.' END RETURN @Result