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;

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

相关推荐
余槐i6 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹6 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo6 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
骇客野人6 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
美狐美颜SDK开放平台8 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
花间相见9 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见9 小时前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
ITxiaobing202310 小时前
IP 库与 AppsFlyer 国家/地区数据不一致,如何系统地对账?
数据库·网络协议·tcp/ip
这个DBA有点耶10 小时前
从时间到语义:时序数据库与向量数据库的核心机制、选型与多模融合趋势
数据库·mysql·架构
对空六课10 小时前
RFM分层边界变化的回溯计算
大数据·服务器·前端·数据库·人工智能·算法·数据分析