Teradata复杂视图跨库访问权限问题
权限 访问 视图 复杂 Teradata 问题 跨库
2023-09-14 09:00:03 时间
1.问题描述
使用bat_madm用户执行如下语句,语句三执行失败:
语句一(执行成功):replace view madm_view.testA as select * from gdm_view.testB;
语句二(执行成功):select * from gdm_view.testB;
语句三(执行失败):select * from madm_view.testA;
2.原因分析
bat_madm用户存在对madm_view库的查询权限、创建视图和删除视图权限,也存在对gdm_view.testB的查询权限。但是缺少数据库madm_view对数据库gdm_view的查询权限。
3.原理分析
执行语句三,访问权限路径为,用户bat_madm-->数据库madm_view-->数据库gdm_view,当同时具备整个路径上的访问权限时才会执行成功。并且数据库madm_view对数据库gdm_view权限,需要使用with grant option级联。具体权限语句如下:
grant select,create view,drop view on madm_view to bat_madm; grant select on gdm_view to bat_madm; grant select on gdm_view to madm_view with grant option;
特别说明:从原理上讲,访问权限路径为用户bat_madm-->数据库视图madm_view.testA-->数据库视图gdm_view.testB,即可实现数据访问。但从实际实施角度讲,权限控制到视图级,存在维护成本较高问题,所以一般情况下我们权限控制在库级。
4.模拟测试
(1)环境准备(管理员用户citic_edw执行)
--创建目录结构 modify user citic_edw as perm=2E6; create database testdb from citic_edw as perm=2E6 spool=2E6; create user testuser from citic_edw as spool=0 perm=0 password="testuser_123"; --创建数据库madm_view create database madm_view from testdb as perm=1E6 spool=1E6; --创建数据库gdm_view,以及所需表和视图 create database gdm_view from testdb as perm=1E6 spool=1E6; create multiset table gdm_view. tbB , no fallback,no before journal,no after journal( a varchar(10)) no primary index; replace view gdm_view.testB as locking row for access sel * from gdm_view. tbB; --创建bat_madm用户,并赋予相应权限 create user bat_madm from testuser as spool=0 perm=0 password="bat_madm_123"; grant select,create view,drop view on madm_view to bat_madm; grant select on gdm_view to bat_madm;
(2)执行测试语句(bat_madm用户执行)
--语句一(执行成功): replace view madm_view.testA as select * from gdm_view.testB; --语句二(执行成功): select * from gdm_view.testB; --语句三(执行失败): select * from madm_view.testA;
(3)赋予库对库权限(citic_edw用户执行)
grant select on gdm_view to madm_view with grant option;
(4)再次执行测试语句(bat_madm用户执行)
--语句一(执行成功): replace view madm_view.testA as select * from gdm_view.testB; --语句二(执行成功): select * from gdm_view.testB; --语句三(执行成功): select * from madm_view.testA;
相关文章
- Linux中修改文件权限方法「建议收藏」
- OpenAI 对 DALL-E 新增 100 万访问权限,你会申请吗?
- 【Google Play】创建并设置应用 ( 访问权限 | 内容分级 | 受众群体 | 类别及联系方式 | 商品详情 )
- 权限Linux命令掌握:如何设置文件权限(linux命令设置)
- 文件权限Linux撤回文件权限:重新获取控制权(linux撤回)
- Linux系统中 用户目录权限控制详解(linux用户目录权限)
- 掌握Oracle权限:快速查询用户权限(oracle用户权限查询)
- 私有网络内实现Oracle访问权限方案研究(oracle内网访问)
- linux文件夹权限继承:实现安全、高效的文件访问(linux文件夹权限继承)
- 管理Linux权限管理:让管理更简单(linux常用权限)
- 谨慎更新:Oracle权限管理技巧(oracle权限刷新)
- Linux访问权限: 管理至上(linux访问权限)
- 学习 Linux 权限命令:控制文件和目录访问权限(linux权限命令)
- MySQL:配置远程访问权限(mysql配置远程访问)
- MySQL:建立远程访问用户权限(mysql新建远程用户)
- SQL Server 动态授予权限的实现(sqlserver赋权限)
- 访问解决SQL Server无权限访问问题(sqlserver无权限)
- Linux 递归权限设置:让你更轻松地控制文件夹及子文件夹的访问权限!(linux递归权限)
- MSSQL远程访问:科学配置权限以保护服务器安全(mssql远程访问权限)
- 实现oracle数据库安全之全库访问权限管理(oracle全库权限)
- Oracle 12权限访问的安全密码管理(oracle 12密码)
- asp.netForms身份验证和基于角色的权限访问
- ASP.NET笔记之图库权限设置的方法