通常用户具有resource角色即可truncate自己创建的表,但不能truncate其他用户的表,如果要授权可以truncate其他的表,则需要更多权限(dba角色当然可以,但权限太大)。
临时处理
可以授权用户drop any table的权限(也比较大,所以是临时的),使用后回收。
达梦需要打开系统参数:
alter system set 'ENABLE_DDL_ANY_PRIV'=1 both;
才允许授权drop any table的权限。
该参数默认关闭。
存储过程解决
--创建存储过程(有truncate表权限的用户创建)
create or replace procedure p_truncate (t_name varchar(500))as
DECLARE v_sql varchar(1000);
begin
v_sql:='truncate table '||t_name;
execute immediate v_sql;
print(t_name||' truncate成功!');
end;
--授权其他用户执行存储过程权限
grant execute on p_truncate to test;
--被授权的用户调用
call sysdba.P_TRUNCATE('SYSDBA.T_INT');
文章
阅读量
获赞