gpt4 book ai didi

sql-server - 表中没有访问权限时的存储过程访问

转载 作者:行者123 更新时间:2023-12-02 06:42:40 25 4
gpt4 key购买 nike

全部,

在 SQL Server 中,存储过程(从用户运行)是否可以写入用户无权直接写入表的表?

Rgds,

MK

最佳答案

正确答案是 ,存储过程无权写入表。然而,由于 Ownership Chains,大多数用户错误地认为它是 YES :

When multiple database objects access each other sequentially, the sequence is known as a chain. Although such chains do not independently exist, when SQL Server traverses the links in a chain, SQL Server evaluates permissions on the constituent objects differently than it would if it were accessing the objects separately. These differences have important implications for managing security. Ownership chaining enables managing access to multiple objects, such as multiple tables, by setting permissions on one object, such as a view.



因此,如果用户形成所有权链,则过程将能够写入用户无权写入的表。这意味着如果包含表的模式的所有者与包含过程的模式的所有者相同,则形成所有权链并且允许过程写入表中。由于在实践中部署的绝大多数对象都属于 dbo模式,所有权链几乎总是形成的。

理解这些细节很重要,这样您就可以解决问题并理解为什么允许将过程写入表中。 Erland Sommarskog 有一篇关于这个主题的优秀综合文章: Giving Permissions through Stored Procedures .这篇文章非常详细地解释了所有可用的选项。您最好的选择,远好于所有权链接,是 code signing .

了解其工作原理还有助于理解为什么动态 SQL 似乎“中断”:运行动态 SQL 是所有权链的自动中断,这会导致所有“魔法”消失。这也有助于理解为什么这种“魔法”在数据库之外似乎不起作用: cross db ownership chaining Option默认值为 0。

关于sql-server - 表中没有访问权限时的存储过程访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5355528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com