Oracle:您可以专门授予CREATE GLOBAL TEMPORARY TABLE吗?

时间:2018-07-06 12:09:23

标签: oracle

您可以授予特权以仅创建全局临时表,即不创建CREATE TABLE吗?

这种情况的背景源于不允许“ CREATE TABLE”的安全模型...我找不到对任何特定特权的引用。

1 个答案:

答案 0 :(得分:5)

  

我找不到对任何特定特权的引用。

因为据我所知,没有。您仍然必须向用户授予CREATE TABLE特权,这样他才能创建TEMPORARY表。

为了防止用户创建常规表并允许他仅创建临时表,您可以考虑以下内容:

授予用户CREATE TABLE特权并撤销特定表空间上的配额。

alter user <<user_name>> quota 0M on <<tablespace>>;

它可能是用户的默认表空间,也可能是其他表空间。

在没有DEFFERED_SEGMENT_CREATION的Oracle版本中,当用户尝试创建常规表时,足以看到space quota exceeded for tablespace

在带有DEFFERED_SEGMENT_CREATION的Oracle版本中,用户仍然可以创建常规表,但不能填充常规表。用户尝试执行INSERT语句的第二秒钟,将显示space quota exceeded for tablespace

因此,您可以考虑将deferred_segment_creation参数设置为false

alter system set deferred_segment_creation = false;