你应该知道的数仓安全:都是同名Schema惹的祸

摘要:我是管理员账号 , 怎么还没有权限?当小伙伴询问的时候 , 我第一时间就会想到都是用户同名Schema惹的祸
本文分享自华为云社区《你应该知道的数仓安全——都是同名Schema惹的祸》 , 作者: zhangkunhn。
典型场景经常遇到小伙伴问到:
  • 我是管理员账号 , 怎么还没有权限?
  • 管理员给我赋权了啊 , 怎么还没有权限?
当小伙伴询问的时候 , 我第一时间就会想到都是用户同名Schema惹的祸 。
你应该知道的数仓安全:都是同名Schema惹的祸

文章插图
同名Schema是私有Schema我们知道 , CREATE USER语法在创建用户的同时会在当前数据库中创建一个与用户同名的SCHEMA 。这个Schema很特殊 , 只有两种用户能在这个Schema下面创建表、视图、函数等对象:
  1. 用户自己
  2. 管理员
然而 , 不管谁创建的 , 对象的所有者(Owner)都是用户自己 。基于这个事实 , 我们可以称用户同名Schema为私有Schema 。私有表明了当前Schema的特殊性 , 在这个Schema下面的所有对象都是这个用户自己的 , 不管是谁创建的 。
我们来看一个例子 。数据库中有三个用户 , 如表所示 。
你应该知道的数仓安全:都是同名Schema惹的祸

文章插图
使用管理员dbadmin执行以下SQL:
gaussdb=# create table ua.ta (c1 int); CREATE TABLE gaussdb =# select relname, relowner, rolname from pg_class c, pg_authid a where relname = 'ta' and c.relowner= a.oid; relname | relowner | rolname ---------+----------+---------t1| 16546 | ua(不是dbadmin) (1 row)可以看到:

    经验总结扩展阅读