You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSIS作业报错229:sys.database_principals的SELECT权限被拒如何解决

问题排查与解决方案

标题:SQL Server Integration Services
对象'database_principals'、数据库'mssqlsystemresource'、架构'sys'的SELECT权限被拒绝。(Microsoft SQL Server,错误:229)

以下操作均需要使用拥有sysadmin固定服务器角色的账户登录SQL Server执行,否则会出现权限不足无法修改配置的问题。

步骤1:确认SSIS作业的实际运行身份

SSIS作业运行时使用的身份并非SSIS目录所有者,而是SQL Server代理作业配置的运行身份,优先执行以下SQL查询确认对应账户:

SELECT 
    j.name AS JobName,
    js.step_name AS StepName,
    js.subsystem,
    js.proxy_id,
    p.name AS ProxyName,
    c.credential_identity AS ProxyAccount
FROM msdb.dbo.sysjobs j
JOIN msdb.dbo.sysjobsteps js ON j.job_id = js.job_id
LEFT JOIN msdb.dbo.sysproxies p ON js.proxy_id = p.proxy_id
LEFT JOIN msdb.dbo.syscredentials c ON p.credential_id = c.credential_id
WHERE j.name = N'替换为你的SSIS作业实际名称'

如果查询结果中proxy_id为0,说明作业使用SQL Server代理服务本身的账户运行。

步骤2:移除拒绝权限限制

执行以下SQL移除对应用户的拒绝读写权限:

USE SSISDB
GO
-- 替换[]内的内容为步骤1查询到的作业运行账户
ALTER ROLE db_denydatareader DROP MEMBER [你的作业运行账户]
GO
ALTER ROLE db_denydatawriter DROP MEMBER [你的作业运行账户]
GO
-- 如果确认是dbo账户被添加了拒绝权限,执行以下两句
ALTER ROLE db_denydatareader DROP MEMBER dbo
GO
ALTER ROLE db_denydatawriter DROP MEMBER dbo
GO

步骤3:分配必要的访问权限

服务器级权限配置

USE master
GO
GRANT VIEW SERVER STATE TO [你的作业运行账户]
GO
GRANT VIEW ANY DEFINITION TO [你的作业运行账户]
GO
-- 显式授予system resource相关元数据查询权限
GRANT SELECT ON sys.database_principals TO [你的作业运行账户]
GO

SSIS目录权限配置

USE SSISDB
GO
ALTER ROLE ssis_admin ADD MEMBER [你的作业运行账户]
GO
-- 如需给dbo补ssis_admin权限执行以下语句
ALTER ROLE ssis_admin ADD MEMBER dbo
GO

步骤4:验证修复效果

重新触发SSIS作业执行,确认不再抛出229权限错误。如果仍有报错,可进一步排查SSIS包内部使用的连接字符串对应账户是否有业务数据库的访问权限。

内容的提问来源于stack exchange,提问作者yalda sana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:54:04