我正在尝试删除服务器审核,它正在捕获服务器审核规范中定义的登录事件,如下所示:
CREATE SERVER AUDIT SPECIFICATION [System Login Audit]
FOR SERVER AUDIT [System Logins]
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP),
ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
ADD (AUDIT_CHANGE_GROUP),
ADD (DBCC_GROUP),
ADD (DATABASE_PERMISSION_CHANGE_GROUP),
ADD (DATABASE_OBJECT_PERMISSION_CHANGE_GROUP),
ADD (SERVER_PERMISSION_CHANGE_GROUP),
ADD (SERVER_PRINCIPAL_IMPERSONATION_GROUP),
ADD (DATABASE_CHANGE_GROUP),
ADD (DATABASE_OBJECT_CHANGE_GROUP),
ADD (SERVER_PRINCIPAL_CHANGE_GROUP),
ADD (LOGIN_CHANGE_PASSWORD_GROUP),
ADD (SERVER_STATE_CHANGE_GROUP),
ADD (DATABASE_OWNERSHIP_CHANGE_GROUP),
ADD (DATABASE_OBJECT_OWNERSHIP_CHANGE_GROUP),
ADD (SERVER_OBJECT_OWNERSHIP_CHANGE_GROUP)
WITH (STATE = ON)
我成功删除了上面提到的服务器审核规范,但仍然无法删除相关的服务器审核。我尝试用命令禁用它
ALTER SERVER AUDIT [System Logins] WITH (STATE = OFF)
结果被什么东西屏蔽了,不让我删除。
我最激进的尝试是在单用户模式下运行 SQL Server 服务时执行此命令,同时禁用 SQL Server Agent 和 SQL Server CEIP 服务。
好的。正如我在评论中所写,我试图删除被该服务器审计阻止的服务器审计,该服务器审计正在捕获服务器元数据的更改,这可以通过运行查询来说明:
select * from sys.dm_tran_locks where request_session_id = <that_session_id>
打个比方来说,这就像坐在树枝上砍树枝一样。
显然,仅以单用户模式运行服务器(我之前尝试过)是不够的。
解决方案是以最小配置 (-f) 启动 SQL Server,并禁用监视功能 (-x)
net start "SQL Server (MSSQLSERVER)" /x /f /mSQLCMD
然后通过在 SQLCMD 中运行语句来禁用审核:
ALTER SERVER AUDIT [System Logins] WITH (STATE = OFF)