权限管理
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 | 缺省角色的名称 |
热门帖子
- 12025-12-01浏览数:181974
- 22023-05-09浏览数:24027
- 42023-09-25浏览数:17270
- 52020-05-11浏览数:16409