我在这里阅读Permissions for truncating a table您需要向用户授予ALTER权限,以便他们能够截断表。但是,我仍有问题在用户被授予此角色的情况下截断表格。
为什么会这样?
PS。我自己作为表的所有者能够顺便截断。没有其他人拥有ALTER权限。
答案 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
存储过程,以便截断允许的表列表以加强系统中的安全性