为什么Oracle数据字典骗我?

问题描述 投票:1回答:1

在ALL_CONSTRAINTS表的文档,它说的是,“所有者”列中为我们提供了“约束定义的所有者”的信息。但是,在考察活生生的例子,当我发现是假的。

select user from dual; --gives EXAMPLE_USER create table example_user.example_table(id number);

现在,我将改变用户SYS。

select user from dual --gives SYS alter table example_user.example_table add constraint ex_constrain check(id > 10);

现在最好的部分:

select owner from all_constraints where constraint_name = 'EX_CONSTRAINT'; --gives EXAMPLE_USER and not SYS.

我的问题很简单:为什么呢?测试在:Oracle数据库11g EE 11.2.0.4.0

oracle dictionary constraints
1个回答
1
投票

那么,SYS是特殊的,它拥有的数据库,并可以做任何事情。

如果你想要做同样的其他用户(例如,SCOTT,让它试图创建EXAMPLE_USER的表约束),你除非特权用户授予SCOTT ALTER ANY TABLE系统权限失败。这样做时,该用户将能够改变任何表(属于任何用户),并且包括创建约束。

如果你想创建一个主键约束,这种特权是不够的 - 你需要CREATE ANY INDEX特权以及(如主键创建索引以及)。

就像CREATE ANY TABLE系统权限,它允许您创建任何其他用户的方案表,但该表,然后将属于架构所有者,同样也适用于约束 - 是的,你在代表其他用户创建它,但约束仍然由表所有者,而不是创造者拥有。

因此,词典不说谎,它是你谁误会是怎么回事。

© www.soinside.com 2019 - 2024. All rights reserved.