2017-05-17 35 views
0

我已经在这里读取Permissions for truncating a table您需要向用户授予ALTER权限,以便他们能够截断表。但是,我仍然遇到问题,用户被授予此角色时会截断表。截断表的问题WITH ALTER权限

enter image description here

enter image description here

任何想法,这是为什么?

PS。我自己作为桌子的主人可以顺便截断。没有其他人拥有ALTER权限。

+1

你可以在这里找到答案:https://dba.stackexchange.com /问题/ 52828 /什么的权限,是-必要换截断-A-表 – Leila

回答

2

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

对于Oracle用户must haveDROP ANY TABLE系统特权。

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

汤姆凯特has你的问题的解决方案:

当然,这是存储过程的全部意义。

要选择性地给别人的abilitly截断特定的表, 或全部通过一些模型所拥有的表,你会编:

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

或(任何通过一些模型所拥有的表,或如果该模式有 降大任于表私法任何表)

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

,然后只授予对程序执行到需要 运行该命令的任何用户。由于存储过程与过程的所有者的基本权限 一起运行,因此不需要任何强大的权限,如 “drop any table”来截断该表。

可以进一步提高do_the_truncate存储过程有允许表的列表被截断,以加强安全在您的系统