我的数据库中有五个域用户和五个角色。GRANT EXECUTE
添加到适当的角色。角色包含在其他角色中,即最多我们有一个角色拥有两个程序的授权,下面还有两个角色可以访问四个和三个程序,最后我们有两个角色。使用此解决方案,如果我将GRANT EXECUTE
权限授予最高角色,则所有角色都可以访问此过程。
我的问题:假设程序有UPDATE
和INSERT
操作。对于给定角色的给定过程是否足够,GRANT EXECUTE
以便用户可以使用该过程并实际在表上执行UPDATE
和INSERT
操作,或者除了GRANT EXECUTE
我需要授予角色UPDATE
和INSERT
给定过程中的所有表之外?
存储过程使用的对象的权限不会通过完整的所有权链进行检查。因此,当所有涉及的对象都具有相同的所有者(通常是模式所有者)时,无需授予存储过程使用的对象的权限。在您的情况下,用户只需要存储过程执行权限,其中包括通过角色成员资格继承的权限。
这假定存储过程中没有动态 SQL,并且对象驻留在同一数据库中。有关详细信息,请参阅授权和权限文档。