【发布时间】:2021-09-02 08:47:04
【问题描述】:
我目前在 SQL Server 2019 数据库服务器上实现触发器时遇到问题。
我在 DB_A 数据库的表 A1 中有一个触发器,当数据插入到 DB_A 数据库的表 A1 中时,它应该对 DB_B 数据库的表 B1 进行插入。
两个数据库都在同一个实例上。
当我使用直接对两个数据库都具有权限的用户插入数据时,此触发器可以正常工作。
问题是连接到该数据库的应用程序使用应用程序角色来阻止用户对表进行直接请求,当触发器尝试插入远程表时,我收到以下错误:
消息 916,级别 14,状态 2,程序 XXX,第 6 行 [批处理开始第 1 行]
服务器主体“XXXX”无法在当前安全上下文下访问数据库“XXX”。
DB1 数据库有一个仅对该数据库具有权限的应用程序角色,我知道应用程序角色仅在数据库级别具有范围,我也知道我无法将应用程序角色映射到其他数据库但是如何如何解决同一实例的数据库之间的访问问题?
【问题讨论】:
-
一些想法: 1. 授予应用程序访问其他数据库的权限。 2. 使用数据库所有权链接(这有很多警告!)。 3. 使用在其他数据库中具有权限的证书签署您的触发器。 4. 改用程序来处理工作负载,并对其进行签名。 5. 重新考虑你的设计,不要使用触发器。
标签: sql sql-server triggers insert application-role