视图和过程可访问由不同用户拥有的基础对象。例如,如果 usera、userb、userc 和 userd 是四个不同的用户,而 userd.viewd 可能基于 userc.viewc,userc.viewc 可能基于 userb.viewb,userb.viewb 可能基于 usera.tablea。对于过程,也与此相似:userd.procd 可能调用 userc.procc,userc.procc 可能调用 userb.procb,userb.procb 可能插入 usera.tablea。
下列 [任意访问控制](DAC) 规则适用于嵌套视图和表:
要创建视图,用户必须对视图中的所有基本对象(例如,表和视图)具有 SELECT 权限。
要访问视图,必须用 GRANT OPTION(授权选项)向视图所有者授予对基表或视图的适当权限,还必须向视图的用户授予对视图的适当权限。
用 WHERE 子句更新需要同时具有 SELECT 和 UPDATE 权限。
如果用户拥有视图定义中的表,则用户可以通过某个视图来访问这些表,即使用户不是该视图的所有者并且尚未被授予对该视图的访问权限,也可以这样做。
下列 DAC 规则适用于嵌套过程:
用户无需对基础对象(例如,表、视图或过程)具有任何权限即可创建过程。
对于要执行的过程,过程的所有者需要对该过程所引用的对象具有适当的权限。
即使某个用户拥有某个过程引用的所有表,除非该用户已被授予对该过程的 EXECUTE 权限,否则该用户将无法执行该过程以访问这些表。
下面介绍描述此行为的一些示例。
示例 1:用户 1 创建表 1,用户 2 在表 1 上创建视图 2
示例 2:用户 2 创建访问表 1 的过程 2
示例 3:用户 1 创建表 1,用户 2 创建表 2,用户 3 创建将表 1 和表 2 连接在一起的视图 3
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |