各类数据库如何仅授权用户访问元数据
一、 背景
最近收到业务需求,希望对各类数据库的业务表进行打标,需要创建用户可以访问DB中业务表的元数据,但又不能访问实际数据。经过对各类DB的测试,基本得到授权语句,记录一下。
二、 授权语句
| DB类型 | 授权语句 | 备注 |
| Oracle | grant connect to user; grant select any dictionary to user; | 最简单但存在权限放大,实际能访问各类数据字典 |
| PostgreSQL | grant connect to database xxx to user; grant usage on schema xxx to user; | by schema授权,问题是如果有实例db和schema都巨多,单个授权会很麻烦,需要拼脚本 |
| MySQL | grant references on db.* to user; | |
| SQL Server | -- 服务器级 GRANT VIEW ANY DEFINITION TO user; -- db级 GRANT VIEW DEFINITION on db TO user; |
三、 待优化
以上只是针对单个实例进行操作时可以直接设置,但如果需针对大量实例,仍需批量化方案。目前只是一些思路,尚未正式验证。
- Oracle:有os层认证,仅一条命令,简单的ansible即可实现
- PG:有os层认证,可能有多条命令,可以查询db及schema后拼接SQL并执行授权
- MySQL:只能通过密码登录,每个服务器密码不相同,暂时没想出好方法
- SQL Server:原理上与Oracle一致,主要看如何批量操作,powershell可以实现
