如何抓取某个用户下访问数据库的权限,并拼成SQL,4.0 mysql 模式下

【 使用环境 】生产环境 or 测试环境 生产
【 OB or 其他组件 】 ob 4.0
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

如何抓取某个用户下访问数据库的权限,并拼成SQL,4.0 mysql 模式下

select *from cdb_ob_database_privilege t1 where   t1.tenant_id !=1    and t1.database_name not in ('oceanbase','information_schema','ocp','SYS','LBACSYS','ORAAUDITOR','mysql','__recyclebin','__public','test')

我知道可以这样查询,我的问题是:不知道怎么拼凑成如下SQL,请给出案例,拼凑成如下授权?

grant all on core_AA.* to  AAdata;

grant select ,  delete,  insert ,update  on core_AA.* to AAdata ;

这个表可以查看
select * from mysql.user\G;

1 个赞

试试这个sql。

select TENANT_ID,replace(concat('grant ',  
	case when PRIV_SELECT='YES' then 'select,' else '' end, 
	case when PRIV_INSERT='YES' then 'insert,' else '' end, 
	case when PRIV_UPDATE='YES' then 'update,' else '' end, 
	case when PRIV_DELETE='YES' then 'delete,' else '' end, 
	case when PRIV_ALTER='YES' then 'alter,' else '' end, 
	case when PRIV_CREATE='YES' then 'create,' else '' end, 
	case when PRIV_DROP='YES' then 'drop,' else '' end, 
	case when PRIV_INDEX='YES' then 'create index,' else '' end, 
	case when PRIV_SHOW_VIEW='YES' then 'show view,' else '' end, 
	' on ',t1.DATABASE_NAME,'.* to ',t1.username,';'),', on',' on') grant_sql from cdb_ob_database_privilege t1 
where   t1.tenant_id !=1    and t1.database_name not in ('oceanbase','information_schema','ocp','SYS','LBACSYS','ORAAUDITOR','mysql','__recyclebin','__public','test') 

1 个赞

create index 改成index

1 个赞