/* SQLInsight Pro: fjern den valgfri læseadgang til Dynamics AX' systemtabeller ============================================================================== Fjerner det, grant-dynamics-ax-read.sql gav, i én AX-database: SELECT på AX' batch-, nummerserie-, RecId- og firmatabeller. Agentens database-bruger slettes ikke (den kan være oprettet af grant-least-privilege.sql). Bagefter viser SQLInsight AX-datatjekkene som "ikke målbar" med den GRANT, der skal til for at slå dem til igen. Understøtter SQL Server 2005 og nyere. Kør som sysadmin eller som db_owner/db_securityadmin i AX-databasen. */ SET NOCOUNT ON; DECLARE @DatabaseName sysname; DECLARE @LoginName sysname; SET @DatabaseName = N'AXDB'; -- <== ret til AX-databasen SET @LoginName = N'DOMÆNE\svc-sqlinsight$'; -- <== ret til agentens login IF DB_ID(@DatabaseName) IS NULL BEGIN RAISERROR(N'Databasen %s findes ikke.', 16, 1, @DatabaseName); RETURN; END; DECLARE @Procedure nvarchar(300); DECLARE @Sql nvarchar(max); SET @Procedure = QUOTENAME(@DatabaseName) + N'.sys.sp_executesql'; SET @Sql = N' SET NOCOUNT ON; DECLARE @user sysname; DECLARE @revoke nvarchar(max); DECLARE @count int; SELECT @user = name FROM sys.database_principals WHERE sid = SUSER_SID(@login); IF @user IS NULL BEGIN PRINT N''Login''''et har ingen bruger i '' + DB_NAME() + N''. Intet at fjerne.''; RETURN; END; SET @revoke = N''''; SET @count = 0; SELECT @revoke = @revoke + N''REVOKE SELECT ON '' + QUOTENAME(s.name) + N''.'' + QUOTENAME(t.name) + N'' FROM '' + QUOTENAME(@user) + N''; '', @count = @count + 1 FROM sys.tables t JOIN sys.schemas s ON s.schema_id = t.schema_id WHERE UPPER(t.name) IN (N''BATCH'', N''BATCHJOB'', N''BATCHJOBHISTORY'', N''NUMBERSEQUENCETABLE'', N''NUMBERSEQUENCESCOPE'', N''NUMBERSEQUENCEREFERENCE'', N''SYSTEMSEQUENCES'', N''SQLDICTIONARY'', N''DATAAREA''); IF @count > 0 EXEC (@revoke); PRINT N''SELECT fjernet på '' + CAST(@count AS nvarchar(10)) + N'' AX-tabeller i '' + DB_NAME() + N'' for '' + @user + N''.'';'; EXEC @Procedure @Sql, N'@login sysname', @login = @LoginName;