【问题标题】:Cross Database Grants in SQL ServerSQL Server 中的跨数据库授权
【发布时间】:2018-05-03 12:37:47
【问题描述】:

我在数据库 A 中有一个存储过程 X。

X,除其他外,更新数据库 B 中的表 Y

我已将 X 上的执行权限授予用户 1,但是当用户 1 调用 X 时出现以下错误:

The UPDATE permission was denied on the object 'Y', database 'B', schema 'dbo'.

如何正确授予 User1 更新权限?我不想直接将表 Y 上的插入/更新/删除权限授予 User1

【问题讨论】:

    标签: sql-server database access-rights


    【解决方案1】:

    如果您的所有对象都具有相同的所有者 (dbo) 并且数据库所有者相同,那么您只需启用跨数据库所有权链,即您应该为两个数据库执行此操作

    ALTER DATABASE A SET DB_CHAINING ON;  
    ALTER DATABASE B SET DB_CHAINING ON;
    

    链接:Enabling Cross-Database Access in SQL Server

    User1 应该映射到第二个数据库。

    【讨论】:

    • 感谢您的回复。我远不是 SQL Server 方面的专家,所以我能澄清你所说的几件事吗?两个数据库中的表都是 X.dbo 和 Y.dbo。我对 dbo 部分的重要性的理解一直让我难以理解。这是否满足您的要求?
    • 如果您的 proc 和您的两个表都在 dbo 模式(A.dbo.my_sp,B.dbo.Y)中并且没有人手动将授权更改为其他,那么您的所有对象都具有相同的所有者 (dbo)。您还应该检查数据库所有者是否相同并在两个数据库上启用 DB_CHAINING
    • 好的。谢谢。我想我现在拥有它
    猜你喜欢
    • 2019-04-30
    • 2011-02-20
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2023-03-16
    相关资源
    最近更新 更多