【问题标题】:Issue with truncating table WITH ALTER permissions使用 ALTER 权限截断表的问题
【发布时间】:2017-10-16 08:48:33
【问题描述】:

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

有什么想法吗?

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

【问题讨论】:

标签: sql oracle truncate


【解决方案1】:

您所指的链接适用于 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;

然后将对该过程的执行权限授予任何需要的用户 运行该命令。由于存储过程使用基本权限运行 程序的所有者,您不需要任何强大的权限,例如 “删除任何表”以截断该表。

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

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 2023-03-21
    • 1970-01-01
    • 2020-08-03
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多