在我的 Azure SQL 托管实例中,我有两个数据库,Database_A 和 Database_B。用户 A_ABC 只能访问 Database_A,并且他是角色 db_owner 的一部分。
当尝试更改表时,我们收到以下错误
查询: alter table mta.mta_dmn add active char(3)
错误: 消息 916,级别 14,状态 2,过程 TR_XYZ_DDL_AUDIT,第 8 行 [批处理开始行 0] 服务器主体“A_ABC”无法在当前安全上下文下访问数据库“Database_B”。
Database_A 和 Database_B 之间没有交叉数据库连接或任何链接,在数据库所有者权限下,我的理解是用户应该能够在 Database_A 中进行任何活动。也没有任何一个数据库中存在的过程“TR_XYZ_DDL_AUDIT”
我无法找到为什么会出现此错误/无法理解此错误或无法找到解决方案。完全放弃登录并重新创建以防万一,但问题仍然存在
我的猜测是你有一个 DDL 触发器,这是造成这种情况的根本原因。检查 Database_A 中的触发器(假设这是要更改的表所在的数据库)。
可能此触发器在 Database_B 中执行一个存储过程,该过程应该对此操作进行一些审核。
TR_XYZ_DDL_AUDIT 这个名字给了我们一些线索。