假设我创建了这两个帐户:
CREATE USER u1 IDENTIFIED BY "&&u1Password"
DEFAULT TABLESPACE u1tbs
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON u1tbs
QUOTA 256M ON users
QUOTA 0M ON ket;
CREATE USER u2 IDENTIFIED BY "&&u2Password"
DEFAULT TABLESPACE u2tbs
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON u2tbs
QUOTA 256M ON users
QUOTA 0M ON u1tbs;
Run Code Online (Sandbox Code Playgroud)
我已授予 u2 对 u1 架构的完全访问权限。如您所见,u1 中的所有表都在表空间 u1tbs 中。当 u2 向 u1 的模式添加数据时,数据会去哪里?如果是这样,它不会与quota 0M on ...
?
编辑:问题应该在 dba.stack 上...
小智 5
配额计算基于表所有者,而不是插入(或删除或更新)数据的用户。
例如,如果u1创建一个表,u2插入300MB数据,然后u3删除100MB相同数据,u4更新100MB数据,只检查u1的配额,对于其他用户,只检查表级别的权限(授予插入/删除等)被检查。
在你给出的例子中,没有矛盾,u2插入到u1拥有的表中,所以只检查u1的配额。
请注意,无需指定 QUOTA 0M,因为默认情况下不允许表空间配额。
http://docs.oracle.com/cd/B10500_01/server.920/a96521/users.htm#15298
您可以为每个用户分配任何表空间(临时表空间除外)的表空间配额。分配配额有两件事:
具有创建特定类型对象权限的用户可以在指定的表空间中创建这些对象。
Oracle 将可以分配给指定表空间内用户对象存储的空间量限制为配额量。
默认情况下,用户对数据库中的任何表空间都没有配额。如果用户具有创建架构对象的权限,则必须分配配额以允许用户创建对象。至少,为用户分配默认表空间的配额,并为他们可以在其中创建对象的其他表空间分配额外的配额。