gbase8s数据库权限分类及基础使用

一 权限分类

1.库级权限

connect 权限

拥有连接数据库的权限

执行SELECT、INSERT、UPDATE 和 DELETE 语句,如果用户有必要的表级权限

创建视图,如果用户有对底层表的 Select 权限

创建同义词

创建临时表及创建临时表上的索引

授予表或视图的权限,如果该用户拥有该表(或已经由 WITH GRANT OPTION 关键字被授予对表的权限)

resource 权限

除了包含connect权限外,还有 create table,create index,create udr ,create type 权限

dba权限

除了包含resource外还拥有如下额外权限

将任何数据库级权限授予另一用户,包括 DBA 权限

将任何表级权限授予另一用户或角色

将角色授予用户或授予另一角色

取消权限,您在 REVOKE 语句的 AS 子句中将其 grantor 指定为 revoker

当注册 UDR 时,限制 DBA 的 Execute 权限

执行 SET SESSION AUTHORIZATION 语句

创建任何数据库对象

创建表、视图和索引,指定另一用户为这些对象的所有者

改变、删除或重命名数据库对象,不管谁拥有它们

执行 UPDATE STATISTICS 语句的 DROP DISTRIBUTIONS 选项

执行 DROP DATABASE 和 RENAME DATABASE 语句

2.对象级权限

表权限

INSERT DELETE SELECT UPDATE REFERENCES INDEX ALTER UNDER ALTER

ALL 关键字将所有可能的表级权限授予指定的用户

分区级权限

INSERT DELETE UPDATE

ALL

例程

EXECUTE

序列

ALTER SELECT

ALL

语言

在注册 UDR时 需要语言级权限

SPL C JAVA

public 权限

public权限 是特殊的权限控制组,具有一组权限,默认的权限为 su-idx---

s(选择)、u(更新)、*(列级别特权)、i(插入)、d(删除)、x(索引)、a(改变)和 r(引用)

二权限的转授

WITH GRANT OPTION 关键字将权限递给 user,随同将相同的权限授予其他用户的权利

三权限的转移

AS grantor

默认情况下是执行当前授权语句的用户,使用as grantor 后 授权者为grantor

在数据库中一般遵循谁授权谁起效的原则

比如dba1 授权 001 用户 查询 t1表的权限,也应该由dba1回收该权限,dba2 无权操作

四鉴权流程

1 检查用户权限

2 检查角色继承权限

3 检查public权限

只要以上任何一个环节检查到拥有所需权限,该用户的访问就被允许

用户拥有的最终权限是(直接权限 + 角色权限 + PUBLIC 权限)的并集

五基础使用

1 创建用户 user01

2 授予库级权限

grant connect/resource/dba to user01;

3 回收权限

revoke connect/resource/dba from user01;

4 表级权限

GRANT ALL ON tab1 TO user01;

revoke all on tab1 from user01;

5 例程级权限

GRANT EXECUTE ON PROCEDURE/FUNCTION/ROUTINE delete_order TO user01;

REVOKE EXECUTE ON PROCEDURE/FUNCTION/ROUTINE delete_order FROM user01;

6 序列级权限

grant all on seq to user01;

REVOKE ALL ON seq FROM user01;

7 语言级权限

GRANT USAGE ON LANGUAGE SPL/C/JAVA TO user01;

REVOKE USAGE ON LANGUAGE SPL/C/JAVA FROM user01;

8.public 权限

GRANT ALL ON tab1 TO public;

revoke all on tab1 from public;

注册UDR 与创建UDR 的区别

创建UDR 指的是使用原生的PL语言创建

注册UDR 指的是引用c或这java等外部语言创建的UDR

六权限查询

1 库级权限查询

database test;

select * from sysusers where username='user01';

username 用户名

usertype 权限类型 D DBA C CONNECT R RESOURCE

2 查询表/序列 级权限

SELECT

t.owner, -- 表的所有者

t.tabname, -- 表名

a.tabauth -- 权限代码

FROM

systabauth a,

systables t,

sysusers u

WHERE

a.tabid = t.tabid

AND a.grantee = u.username

AND u.username = 'user01';

3 查询例程级权限

SELECT

p.procname, -- 例程的名字

a.grantee, -- 被授予权限的用户

a.procauth -- 权限代码

FROM

sysprocauth a,

sysprocedures p

WHERE

a.procid = p.procid -- 关联查询例程名称

AND a.grantee = '你要查的用户名';

4 查询语言级权限(是否有权限注册UDR)

SELECT

langid, -- 语言 ID

grantee, -- 被授权用户

langauth -- 权限代码

FROM

syslangauth

WHERE

grantee = 'username'; -- 替换为你想要查询的用户名

对照关系为

langid langname commet

0 builtin 内建

1 c c

2 spl 原生plsql语法

3 java java

4 client 可能是4GL 几乎用不到

七案例

创建只读用户

1 先查询当前库下所有表的所有这

select tabname,owner from systables where tabid >99;

2 回收表的public 权限

3 授予 select 权限

drop procedure if exists grant_onlyselect(varchar);

create procedure grant_onlyselect(p_user varchar(128))

define p_tab varchar(128);

FOREACH select tabname into p_tab from systables where tabid > 99 and tabtype = 'T'

execute immediate "revoke all on "||p_tab||" from public";

execute immediate "grant select on "||p_tab||" to "||p_user|| " with grant option";

END FOREACH;

end procedure;

数据库对象的拥有者具有该对象的绝对控制,非拥有者需要授权访问

相关推荐
贺今宵9 分钟前
Vue 3 + Capacitor 使用jeep-sqlite,web端使用本地sqlite数据库
前端·数据库·vue.js·sqlite·web
列星随旋14 分钟前
MySQL面经整理
数据库·mysql
AllData公司负责人14 分钟前
大模型赋能AllData数据中台,系列升级|通过联合智谱大模型与Chat2DB开源项目,建设Text2SQL生产场景全新体验的数据源平台!
数据库·人工智能·text2sql·数据中台·数据源·chat2db·智谱大模型
minji...1 小时前
MySQL数据库 (四) MySQL的数据类型,tinyint,float,decimal,枚举enum和集合set
数据库·mysql·tinyint·enum·decimal·varchar·bit
阿演1 小时前
DataDjinn 新版本更新:国产数据库支持、连接树体验、AI 查询和表格编辑继续增强
数据库·人工智能·ai·ai编程
一只fish2 小时前
Oracle官方文档翻译《Database Concepts 26ai》附录-术语表
数据库·oracle
一只fish2 小时前
Oracle官方文档翻译《Database Concepts 26ai》第23章-数据库开发者概念
数据库·oracle
todoitbo2 小时前
从 MySQL 到 KingbaseES:Database、Schema、User 一次讲透
数据库·mysql·国产数据库·kingbasees
勇往直前plus3 小时前
Redis&Python 梳理
数据库·redis·python
千云3 小时前
100w大表0停机回滚:我们为什么放弃Undo Log,选择表名切换?
数据库·后端·mysql