scripts/collector/sqlserver/sql/dbServerFeaturesDatabaseLevel.sql (119 lines of code) (raw):

/* Copyright 2023 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ SET NOCOUNT ON; SET LANGUAGE us_english; DECLARE @PKEY AS VARCHAR(256) DECLARE @CLOUDTYPE AS VARCHAR(256) DECLARE @PRODUCT_VERSION AS INTEGER DECLARE @TABLE_PERMISSION_COUNT AS INTEGER DECLARE @ROW_COUNT_VAR AS INTEGER DECLARE @DMA_SOURCE_ID AS VARCHAR(256) DECLARE @DMA_MANUAL_ID AS VARCHAR(256) SELECT @PKEY = N'$(pkey)'; SELECT @CLOUDTYPE = 'NONE'; SELECT @PRODUCT_VERSION = CONVERT(INTEGER, PARSENAME(CONVERT(NVARCHAR(255), SERVERPROPERTY('productversion')), 4)); SELECT @DMA_SOURCE_ID = N'$(dmaSourceId)'; SELECT @DMA_MANUAL_ID = N'$(dmaManualId)'; IF UPPER(@@VERSION) LIKE '%AZURE%' SELECT @CLOUDTYPE = 'AZURE' IF OBJECT_ID('tempdb..#FeaturesEnabledDbLevel') IS NOT NULL DROP TABLE #FeaturesEnabledDbLevel; CREATE TABLE #FeaturesEnabledDbLevel ( database_name nvarchar(255) DEFAULT db_name(), feature_name NVARCHAR(40), is_enabled_or_used NVARCHAR(1), occurance_count INT ); --Security Policies BEGIN TRY exec('INSERT INTO #FeaturesEnabledDbLevel SELECT db_name(), ''SP'', CASE WHEN count(*) > 0 THEN ''1'' ELSE ''0'' END, CONVERT(int, count(*)) FROM sys.security_policies WHERE is_enabled = 1') /* SQL Server 2016 (13.x) and above */ ; END TRY BEGIN CATCH IF ERROR_NUMBER() = 208 AND ERROR_SEVERITY() = 16 AND ERROR_STATE() = 1 BEGIN exec('INSERT INTO #FeaturesEnabledDbLevel SELECT db_name(), ''SP'', ''0'', 0') /* SQL Server 2014 (12.x) and below */ ; END ELSE BEGIN exec('INSERT INTO #FeaturesEnabledDbLevel SELECT db_name(), ''SP'', ''0'', 0') /* SQL Server 2014 (12.x) and below */ ; END END CATCH --File Tables Detected BEGIN TRY exec('INSERT INTO #FeaturesEnabledDbLevel SELECT db_name(), ''IsFileTablesEnabled'', CASE WHEN count(*) > 0 THEN ''1'' ELSE ''0'' END, CONVERT(int, count(*)) FROM sys.filetables WHERE is_enabled = 1') /* SQL Server 2016 (13.x) and above */ ; END TRY BEGIN CATCH IF ERROR_NUMBER() = 208 AND ERROR_SEVERITY() = 16 AND ERROR_STATE() = 1 BEGIN exec('INSERT INTO #FeaturesEnabledDbLevel SELECT db_name(), ''IsFileTablesEnabled'', ''0'', 0') /* SQL Server 2014 (12.x) and below */ ; END ELSE BEGIN exec('INSERT INTO #FeaturesEnabledDbLevel SELECT db_name(), ''IsFileTablesEnabled'', ''0'', 0') /* SQL Server 2014 (12.x) and below */ ; END END CATCH /* Collect permissions which are unsupported in CloudSQL SQL Server */ BEGIN BEGIN TRY exec('INSERT INTO #FeaturesEnabledDbLevel SELECT db_name(), tmp.permission_name, CASE WHEN count(1) > 0 THEN 1 ELSE 0 END, count(1) FROM ( SELECT pr.name, pr.type, pr.type_desc, dp.permission_name, dp.type AS permission_type FROM sys.database_permissions dp INNER JOIN sys.server_principals pr ON dp.grantee_principal_id = pr.principal_id WHERE pr.name NOT LIKE ''NT SERVICE\%'' AND dp.permission_name IN (''ADMINISTER BULK OPERATIONS'', ''ALTER ANY CREDENTIAL'', ''ALTER ANY EVENT NOTIFICATION'', ''ALTER ANY EVENT SESSION'', ''ALTER RESOURCES'', ''ALTER SETTINGS'', ''AUTHENTICATE SERVER'', ''CONTROL SERVER'', ''CREATE DDL EVENT NOTIFICATION'', ''CREATE ENDPOINT'', ''CREATE TRACE EVENT NOTIFICATION'', ''EXTERNAL ACCESS ASSEMBLY'', ''SHUTDOWN'', ''EXTERNAL ASSEMBLIES'', ''CREATE ASSEMBLY'')) tmp GROUP BY tmp.permission_name'); END TRY BEGIN CATCH IF ERROR_NUMBER() = 208 AND ERROR_SEVERITY() = 16 AND ERROR_STATE() = 1 WAITFOR DELAY '00:00:00' END CATCH END SELECT '"' + @PKEY + '"' as PKEY, '"' + CONVERT(NVARCHAR(MAX), f.database_name) + '"' as database_name, '"' + CONVERT(NVARCHAR(MAX), f.feature_name) + '"' as feature_name, '"' + CONVERT(NVARCHAR(MAX), f.is_enabled_or_used) + '"' as is_enabled_or_used, '"' + CONVERT(NVARCHAR(MAX), f.occurance_count) + '"' as occurance_count, '"' + @DMA_SOURCE_ID + '"' as dma_source_id, '"' + @DMA_MANUAL_ID + '"' as dma_manual_id FROM #FeaturesEnabledDbLevel f; IF OBJECT_ID('tempdb..#FeaturesEnabledDbLevel') IS NOT NULL DROP TABLE #FeaturesEnabledDbLevel;