使用ALTER权限截断表的问题

时间:2017-05-17 04:24:14

标签: sql oracle truncate

我在这里阅读Permissions for truncating a table您需要向用户授予ALTER权限,以便他们能够截断表。但是,我仍有问题在用户被授予此角色的情况下截断表格。

enter image description here

enter image description here

为什么会这样?

PS。我自己作为表的所有者能够顺便截断。没有其他人拥有ALTER权限。

1 个答案:

答案 0 :(得分:2)

您所指的链接适用于MS SQL Server。 Leila评论中的链接也适用于SQL Server。

对于Oracle,用户must have具有DROP ANY TABLE系统权限。

这反过来可能不是你想要的,因为这个系统特权太具破坏性了。

Tom Kyte has解决您的问题:

  

当然,这就是存储过程的全部内容。

     

有选择地让某人擅长截断特定的桌子,   或者某些模式所拥有的所有表,您可以编写代码:

create or replace procedure do_the_truncate as begin execute immediate
'truncate table T'; end;
     

或(某些架构拥有的任何表,或者如果该架构具有   删除任何表priv ANY表)

create or replace procedure do_the_truncate( p_tname in varchar2 ) as
begin execute immediate 'truncate table ' || p_tname; end;
     

然后只需将该过程的执行权授予任何需要的用户   运行该命令。由于存储过程与基本privs一起运行   对于该程序的所有者,您不需要任何强大的权限   "放弃任何桌子"截断该表。

您可以进一步增强do_the_truncate存储过程,以便截断允许的表列表以加强系统中的安全性