GBase 8s
运维管理
文章
精选

权限管理

发表于2025-11-24 15:24:3665次浏览1个评论

1. 管理数据库级别权限

  • 数据库级别权限分为:CONNECT、RESOURCE和DBA。操作系统用户和数据库内部用户需要首先获取库级权限,才可以连接到数据库。

  • 对于拥有DBA、RESOURCE权限的用户,收回其相应的DBA、RESOURCE权限,将自动将其权限降为CONNECT权限。而对于只拥有CONNECT权限的用户,收回其CONNECT权限也就意味着删除该数据库用户。

权限名称

说明

CONNECT

级别最低的一种数据库级别的用户权限。拥有该权限的用户可以执行SELETE、UPDATE、INSERT、DELETE语句,针对数据表执行存储过程,创建数据表的视图,创建临时表。

RESOURCE

拥有该权限的用户除了拥有CONNECT全部权限外,还可以创建新的表,并可以对自己创建的表执行ALTER和DROP操作,创建索引。

DBA

数据库的建立者和拥有者被自动授予这种权限。拥有DBA权限的用户除拥有RESOURCE全部权限外,还可以对其他用户授予或解除CONNECT、RESOURCE、DBA权限,可以对所有数据库对象进行操作。

语法:

database db_name;

(1)授予用户对数据库的权限

grant <connect | resource | dba> to '用户名';

(2)收回用户对数据库的权限

revoke <connect | resource | dba> from '用户名';

(3)查看用户对数据库的权限

对用户授予数据库级别权限,或者创建角色后,在本库的sysusers表中可见,其中usertype: C表示connect; R表示resource; D表示dba; G表示角色

select usertype from sysusers where username = '用户名';

(4)以用户连接实例的某数据库

connect to '数据库名@实例名' user '用户名';

示例:

[gbasedbt@centos78 gbase2]$ dbaccess - -

> database sysuser;

Database selected.

(1)创建内部用户user_i_02

> create user user_i_02 with password '123456';

User created.

(2)切换至用户库mydb1,分别对两用户授予connect、resource权限

> database mydb1;

Database closed.

Database selected.

> grant connect to user_i_01;

Permission granted.

> select usertype from sysusers where username = 'user_i_01';

usertype

C

1 row(s) retrieved.

> grant resource to user_i_02;

Permission granted.

> select usertype from sysusers where username = 'user_i_02';

usertype

R

1 row(s) retrieved.

(3)切换至用户库mydb2,对用户user_i_02授予dba权限(同一用户可以对不同数据库授予不同级别权限)

> database mydb2;

Database closed.

Database selected.

> grant dba to user_i_02;

Permission granted.

> select usertype from sysusers where username = 'user_i_02';

usertype

D

1 row(s) retrieved.

(4)收回dba权限,其权限自动降为connect权限

> revoke dba from user_i_02;

Permission revoked.

> select usertype from sysusers where username = 'user_i_02';

usertype

C

1 row(s) retrieved.

(5)继续收回其connect权限

> revoke connect from user_i_02;

Permission revoked.

> select usertype from sysusers where username = 'user_i_02';

usertype

No rows found.

(6)用户将无法连接该数据库

> connect to 'mydb2@ol_gbase3612_78' user 'user_i_02';

ENTER PASSWORD:

Disconnected.

387: No connect permission.

111: ISAM error: no record found.

Error in line 1

Near character position 1

2. 管理表/视图/例程等权限

表/视图/例程等权限是指用户或角色对数据库对象进行操作的能力。授予权限给用户或角色,以控制对数据库对象的访问和操作。

  • 表级权限分为:SELECT,INSERT,UPDATE,DELETE,INDEX,ALTER,REFERENCES;

  • 视图权限分为:SELECT,INSERT,UPDATE,DELETE(根据基础表的权限和视图定义来确定可以对视图执行哪些操作)

  • 列级权限分为:SELECT,UPDATE,REFERENCES

  • 分片级权限分为:INSERT,UPDATE,DELETE

  • 例程级权限为:EXECUTE

权限名称

说明

SELECT

查询数据

INSERT

插入数据

UPDATE

更新数据

DELETE

删除数据

INDEX

建立索引

ALTER

添加或删除列,修改列数据类型,添加或删除约束,修改表的锁定模式等

REFERENCES

引用表的列,制定参考性约束条件

EXECUTE

执行存储过程、函数或包

ALL

对指定对象的所有权限

注意:

能够执行INDEX/ALTER/REFERENCES操作的用户至少应是RESOURCE级别的用户,CONNECT级别的用户即使被授予这些权限也不能执行相关操作

GBase 8s内部有一个内置的public用户,用户对数据库的访问权限为public用户标准权限加上用户的专有权限。public用户默认对表有查询,新增,更新,删除,索引权限。数据库管理员可以根据需要,修改public的标准权限。

语法:

database db_name;

(1)授予用户/角色对表/视图/例程等对象的权限

grant < select | insert | update | delete | index | alter | references | execute | all> on <对象> to <用户/角色>;

(2)收回用户/角色对表/视图/例程等对象的权限

revoke <权限类型> on <对象> from <用户/角色>;

(3)查看用户/角色对表/视图的权限

SELECT a.username,c.tabname,b.tabauth,b.grantor,c.tabtype FROM sysusers a inner JOIN systabauth b ON a.username = b.grantee AND a.username = <用户/角色> INNER JOIN systables c ON b.tabid = c.tabid;

(4)授予对表部分列的权限

grant < select | update | references | all> (col1, col2…) on tab_name to <用户/角色>;

(5)授予对表分片级的权限(仅对基于表达式分片的表有效)

grant fragment < insert | update | delete | all> on tab_name(part1, part2…) to <用户/角色>;

(6)with grant option

将权限或角色传递给用户,并且使该用户能够将相同的权限或角色授予其他用户;systabauth表中显示的权限为大写字母;此关键字仅对用户有效,被授权者为角色则无效

grant <权限> on <对象> to <用户> with grant option;

(7)as grantor

指定用户授权,使用此子句后,仅指定的grantor可取消当前grant操作产生的影响,即使DBA也不可取消权限

grant <权限> on <对象> to <用户1/角色> as <用户2>;

示例:

> database mydb;

Database selected.

> grant resource to user_i_02;

Permission granted.

--收回public用户对表的默认权限

> select a.grantor, a.grantee, b.tabname, a.tabauth from systabauth a inner join systables b on a.tabid = b.tabid where b.tabname = 'dept';

grantor gbasedbt

grantee public

tabname dept

tabauth su-idx---

1 row(s) retrieved.

> revoke all on dept from public as gbasedbt;

Permission revoked.

> select a.grantor, a.grantee, b.tabname, a.tabauth from systabauth a inner join systables b on a.tabid = b.tabid where b.tabname = 'dept';

No rows found.

--授予用户对表的权限

> grant select,insert,update on emp to user_i_02;

Permission granted.

--授予角色对表的权限

> grant select,insert,update on emp to Role01;

Permission granted.

--授予对表的全部权限,tabauth显示为su-idxar-

> grant all on products to user_i_02;

Permission granted.

--授予对表部分列的select权限,tabauth显示为--*------

> grant select(order_id, quantity) on orders to user_i_02;

Permission granted.

--查看列权限,colauth显示为s--

> select a.grantor, a.grantee, b.tabname, a.colno, a.colauth from syscolauth a i nner join systables b on a.tabid = b.tabid where b.tabname = 'orders';

grantor gbasedbt

grantee user_i_02

tabname orders

colno 1

colauth s--

grantor gbasedbt

grantee user_i_02

tabname orders

colno 3

colauth s--

2 row(s) retrieved.

--授予对表分片级的权限

> grant fragment insert on tab_expression_based(datadbs1, datadbs3) to user_i_02;

Permission granted.

--查看分片级权限,fragauth显示为--i---

> select * from sysfragauth;

grantor gbasedbt

grantee user_i_02

tabid 1011

fragment datadbs1

fragauth --i---

grantor gbasedbt

grantee user_i_02

tabid 1011

fragment datadbs3

fragauth --i---

2 row(s) retrieved.

--授予对视图的select权限

> grant select on emp_details_view to user_i_02;

Permission granted.

--授予对存储过程的execute权限

> grant execute on add_employee to user_i_02;

Permission granted.

--查看视图权限,procauth显示为e

> SELECT b.* FROM sysprocedures a INNER JOIN sysprocauth b ON a.procid = b.procid WHERE a.procname = 'add_employee';

grantor gbasedbt

grantee public

procid 849

procauth e

grantor gbasedbt

grantee user_i_02

procid 849

procauth e

2 row(s) retrieved.

--with grant option使user_i_02能够将相同的权限授予其他用户

> grant insert,select on dept to user_i_02 with grant option;

Permission granted.

--指定user_i_02用户,为user_i_01授予dept表的部分权限

> grant insert,select on dept to user_i_01 as user_i_02;

Permission granted.

--查看权限,with grant option关键字授予的权限显示为大写字母,表示可以将此权限授予其他用户

> select a.grantor, a.grantee, b.tabname, a.tabauth from systabauth a inner join systables b on a.tabid = b.tabid where b.tabname = 'dept';

grantor user_i_02

grantee user_i_01

tabname dept

tabauth s--i-----

grantor gbasedbt

grantee user_i_02

tabname dept

tabauth S--I-----

2 row(s) retrieved.

3. 查看权限

3.1 sysusers表

该系统表展示用户的数据库级别权限及默认角色等信息。

字段

介绍

username

用户/角色名

usertype

C = Connect

R = Resource

D = DBA

G = 角色

U = 缺省角色

priority

保留字段

password

保留字段

defrole

缺省角色的名称

评论

登录后才可以发表评论
流泪猫猫头发表于 23小时前
学习了