一 权限分类
分片级权限(分片表)
表引用
类型级权限
例程级权限
语言级权限
序列级权限
等...
其中常用的为 数据库级权限,表级权限,序列级权限以及例程级权限
二 权限控制
当创建一个用户时,该用户没有任何权限,需要先授予该用户数据库级权限才能连接到数据库
grant connect/resource/dba to user;
在数据库的内部存在一个 public 用户,此用户无需创建,不可被删除, public 默认的权限为 su-idx---
权限说明
s(选择)、u(更新)、*(列级别特权)、i(插入)、d(删除)、x(索引)、a(改变)和 r(引用)
也就是说当一张表被创建出来 public 用户就默认拥有对该表的suidx权限
而数据库的其他用户除了 dba授予的权限之外同时也拥有 public用户的权限
举个例子 ,数据库下创建一张表 t1,使用dba 对 user01 用户授予对t1表的查询权限,由于user01拥有public用户的权限,所以 也可以去insert t1 update t1
个人理解 所谓的public用户权限设计目的是为了方便使用,在不授予任何表级权限的情况下,public 权限基本满足了使用者的常用操作
如果想要精准控制权限,则有如下两个方案
1)回收所有对象的 public用户 权限
revoke all on tabname from public;
回收public 用户权限之后,用户的权限来源就只剩下 dba用户授予的权限
grant select on tabname to username as owner;
此种方式有个问题为回收权限只能回收已经存在的表权限,新建的表仍然会有public 用户的权限,所以需要定时去刷一下权限
2)使用NODEFDAC 环境变量
export NODEFDAC=yes
使用此环境变量创建的表没有public 用户权限
三 权限查询
gbase8s 将权限与用户信息存储在系统表中
用户信息存储在 sysusers表中,而权限信息存储在systabauth表中