前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >变通执行truncate

变通执行truncate

作者头像
bisal
发布2019-05-15 11:15:30
7850
发布2019-05-15 11:15:30
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1426224

这是杂货铺的第470篇文章

我们的开发环境,为了控制DDL权限,给开放人员使用的账号,只是创建了一系列业务表的同义词,并用业务表属主授予了DML权限,这样开发人员,只能对表进行DML,不能进行DDL,如果需要DDL,就要走变更流程,便于我们对库结构变更的跟踪,以及上线脚本的控制。

但是最近一个新的功能,需要对某张表,执行truncate操作。众所周知,truncate虽然是删除数据,但他是DDL,不是DML操作,因此开发人员的账号,肯定不能执行。

创建测试表,并将该表DML授权user_a,

用user_a用户登录,执行truncate操作,提示错误如下,

按照truncate的定义,truncate只能删除用户属主的表,或者该用户拥有drop any table权限。

首先开发的这个账号,不是这张表属主,因此要执行truncate,只能拥有drop any table的权限,但这种做法,就增加了这个账号的权限,他可以删除任意可访问的表,不符合我们要求。

此时,只能曲线救国,首先在tbl_truncate属主用户下创建存储过程p_truncate,执行的操作,就是truncate table tbl_truncate,其次,将存储过程的执行权限,授予用户user_a,

user_b中,exec执行存储过程,即完成了truncate的操作,

如果要更纯粹些,屏蔽属主用户,可以创建同义词,即可直接执行存储过程,完成表的truncate操作,

但是这种存储过程的truncate,和实际程序中,使用truncate table,语法上,还是不同的,因此针对不同的场景,来选择合适方案,仅供参考。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年05月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档