首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

7.5  Execute As

存储过程在安全方面也发挥着重要的作用。你可以授予用户对存储过程的EXECUTE权限,而不授予他们直接访问基对象(underlying object)的权限,这样,你就可以对资源访问进行更为严格的控制。当然,有些例外情况也要求调用者拥有直接权限(direct permission)。要避免调用者拥有直接权限,需要满足下列的所有条件:

n  存储过程和基对象属于同一个架构。

n  操作是静态的(不使用动态SQL)。

n  操作语句是DML(SELECT、INSERT、UPDATE或DELETE)语句,或者执行另一个存储过程。

如果有任何一项条件不满足,调用者都必须拥有访问基对象的直接权限。否则,存储过程中的语句将因为违反安全(security violation)而失败。

这是SQL Server2000中的行为,无法更改。在SQL Server2005中也是这样,只不过现在你可以把存储过程的安全上下文(security context)设置为其他用户的上下文,就像其他用户在运行存储过程一样。创建存储过程时,你可以指定包含下列选项之一的EXECUTE AS子句:

n  CALLER (默认值) 调用者的安全上下文。

n  SELF 创建或修改该存储过程用户的安全上下文。

n  OWNER 数据库所有者的安全上下文。

n  ‘user_name’指定用户名称的安全上下文。

前面提到过,如果调用者不必拥有对基对象的直接权限,需要满足一些规则和条件。使用EXECUTE AS子句时,这些规则和条件依然有效,只不过它们应用于有效的用户,不是调用用户(当然,除非你指定CALLER)。

此外,拥有模拟权限的用户可以提交一个独立的EXECUTE AS <选项>命令以模拟另一个实体(登录或用户)。执行后,就好像当前会话的安全上下文被更改为所模拟实体的安全上下文。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论