SQL Server 2019中##MS_PolicyEventProcessingLogin##登录属性缺失求助
解决SQL Server 2019
##MS_PolicyEventProcessingLogin## 主体权限异常问题 问题背景
SQL Server 2019完全恢复模式服务器中,日志出现错误:激活的存储过程[dbo].[Sp_syspolicy_events_reader]在队列msdb.dbo.syspolicy_event_queue运行时输出“无法以主数据库身份执行,因为主体‘##MS_PolicyEventProcessingLogin##’不存在、无法模拟该类型主体或无权限”。尝试关联登录脚本失败,该用户在msdb和master数据库存在但登录属性缺失,无系统数据库备份,但有一台msdb和master中该用户属性正常的预迁移测试服务器。
解决步骤
1. 从正常测试服务器获取关键信息
在正常测试服务器上执行以下脚本,获取登录和用户的SID及权限配置:
- 获取master库中登录信息
USE master; GO SELECT name, sid, type_desc, is_disabled FROM sys.server_principals WHERE name = '##MS_PolicyEventProcessingLogin##';
- 获取msdb库中用户信息
USE msdb; GO SELECT name, sid, login_name FROM sys.database_principals WHERE name = '##MS_PolicyEventProcessingLogin##';
2. 修复故障服务器的登录主体
- 删除异常登录(操作前确认该登录无业务依赖)
USE master; GO DROP LOGIN [##MS_PolicyEventProcessingLogin##];
- 用正常SID重建登录
将下方0x正常服务器SID值替换为步骤1中获取的SID:
USE master; GO CREATE LOGIN [##MS_PolicyEventProcessingLogin##] WITH PASSWORD = 'Temp@Pass123', -- 系统内置登录,密码仅用于创建,后续由系统管理 SID = 0x正常服务器SID值;
- 恢复登录的系统权限
USE master; GO ALTER SERVER ROLE [##MS_PolicyEventProcessingRole##] ADD MEMBER [##MS_PolicyEventProcessingLogin##]; GO GRANT ALTER ANY EVENT NOTIFICATION TO [##MS_PolicyEventProcessingLogin##]; GO GRANT VIEW SERVER STATE TO [##MS_PolicyEventProcessingLogin##];
3. 修复msdb数据库中的用户关联
- 删除msdb中的异常用户
USE msdb; GO DROP USER [##MS_PolicyEventProcessingLogin##];
- 创建关联到重建登录的用户
USE msdb; GO CREATE USER [##MS_PolicyEventProcessingLogin##] FOR LOGIN [##MS_PolicyEventProcessingLogin##];
- 添加用户到msdb系统角色
USE msdb; GO ALTER ROLE [PolicyAdministratorRole] ADD MEMBER [##MS_PolicyEventProcessingLogin##]; GO ALTER ROLE [SQLAgentUserRole] ADD MEMBER [##MS_PolicyEventProcessingLogin##];
4. 验证修复效果
- 重启SQL Server代理服务
- 检查SQL Server错误日志,确认无相关报错
- 手动触发策略评估验证:
USE msdb; GO EXEC dbo.sp_syspolicy_refresh_policy;
内容的提问来源于stack exchange,提问作者kunkrox
相关产品推荐
相关产品推荐

