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;

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

相关推荐
qq_392690662 小时前
JavaScript中Symbol类型的唯一性特征与创建规范
jvm·数据库·python
u0110225122 小时前
Go语言如何处理multipart_Go语言multipart表单教程【精通】
jvm·数据库·python
运气好好的2 小时前
HTML怎么创建灵感标签智能推荐_HTML输入自动联想标签【技巧】
jvm·数据库·python
qq_349317482 小时前
CSS如何实现动态间距调整_通过CSS变量控制padding与margin值
jvm·数据库·python
djjdjdjdjjdj2 小时前
Redis怎样追踪系统执行的缓慢操作.txt
jvm·数据库·python
杨云龙UP2 小时前
Docker MySQL 5.7 全库备份到异地服务器实践记录_20260427
linux·运维·服务器·数据库·mysql·docker·容器
gmaajt2 小时前
html怎么转astro island模式_Astro Islands如何隔离HTML组件
jvm·数据库·python
四维迁跃2 小时前
CSS如何使用Less的Merge功能合并多个属性值_通过逗号或空格组织css参数
jvm·数据库·python