一夜之间,我们似乎开始让用户无法再读取我们数据库中的视图,而目标表位于另一个数据库中。到目前为止,我已经用尽了我所能找到的一切来找出这背后的原因,但我现在只是陷入困境,需要一些帮助。
为了让视图像这样工作,最终用户在两个数据库上都没有明确授予
SELECT
权限,需要启用 DB_CHAINING
选项。这适用于所有相关数据库。另一个先决条件是具有相同的数据库所有者,这也经过检查和验证仍然如此。最终用户还必须具有与表所在的目标数据库的连接授权,他们也这样做。
这是检查数据库所有者的查询,以及
DB_CHAINING
选项:
SELECT
name,
suser_sname(owner_sid) AS owner_name,
is_db_chaining_on,owner_sid,
owner_sid
FROM
sys.databases
WHERE
name IN ('TargetDB', 'ViewDB');
我还确保没有明确的授权拒绝访问,这一点自昨天以来没有改变,而且答复仍然是“否”。 考虑到上述情况,我无法弄清楚出了什么问题。
Microsoft SQL Server 2016 - 13.0.5893.48
拥有对象的模式与 DB_OWNER 不同。通过对此进行排序,问题得到解决。日志中不可用的原因是 DB_OWNER 的更改是通过 SP 完成的,并且它没有记录模式所有者更改。恢复时,仅恢复了 DB_OWNER。
感谢@Thom A 提出了正确的问题。