zoukankan      html  css  js  c++  java
  • Teradata复杂视图跨库访问权限问题

    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;
  • 相关阅读:
    在注册表中添加windows鼠标右键菜单
    关于MVC中无法将类型为“System.Int32”的对象强制转换为类型“System.String”的问题。
    dns
    ntp
    研究比对搞定博客 canvas-nest.js
    linux 添加ssh和开启ssh服务apt管理的ubuntu
    xshll 连接ubuntu出现 ssh服务器拒绝了密码
    yum和rpm
    服务器无法远程连接原因分析
    关于服务器卡顿的几个原因
  • 原文地址:https://www.cnblogs.com/badboy200800/p/12667650.html
Copyright © 2011-2022 走看看