我们在单个SQL Server 2014服务器上有2个数据库。
以[NT Authority / System]运行的Windows服务正在数据库A上执行存储过程,并且该存储过程试图将行插入数据库B的表中。
失败The INSERT permission was denied on the object 'table_in_database_B', database 'database B', schema 'dbo'.
[NT Authority / System]在两个数据库上均定义为服务器admin和dbo,并且数据库链接处于打开状态。
我们甚至尝试grant select on [table_in_database_B] to public
,但这没有帮助。
我们还能缺少什么?
答案 0 :(得分:0)
这些症状表明,即使DB_CHAINING
处于打开状态,所有权链也已损坏。 dbo
模式由数据库所有者拥有,因此两个数据库必须具有相同的所有者才能维护dbo拥有的对象的不间断所有权链。用户需要同时访问数据库和存储过程的EXECUTE
权限。完整的所有权链不需要其他对象权限。
这可以通过将数据库所有者链接到通用服务器级主体来补救:
ALTER AUTHORIZATION ON DATABASE::DatabaseA TO DatabaseOwnerLogin;
ALTER AUTHORIZATION ON DATABASE::DatabaseB TO DatabaseOwnerLogin;