SQL Server跨数据库插入:INSERT权限被拒绝

时间:2019-03-29 07:52:09

标签: sql-server

我们在单个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,但这没有帮助。

我们还能缺少什么?

1 个答案:

答案 0 :(得分:0)

这些症状表明,即使DB_CHAINING处于打开状态,所有权链也已损坏。 dbo模式由数据库所有者拥有,因此两个数据库必须具有相同的所有者才能维护dbo拥有的对象的不间断所有权链。用户需要同时访问数据库和存储过程的EXECUTE权限。完整的所有权链不需要其他对象权限。

这可以通过将数据库所有者链接到通用服务器级主体来补救:

ALTER AUTHORIZATION ON DATABASE::DatabaseA TO DatabaseOwnerLogin;
ALTER AUTHORIZATION ON DATABASE::DatabaseB TO DatabaseOwnerLogin;