暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

KingbaseDB数据库权限

原创 tyxiaoleng 2023-12-18
976

数据库权限说明

通过ksql元命令\l+ [db_name]查询
权限 说明 标志
ALL CTc全部权限
CREATE 允许在数据库中创建新的schema table index C
TEMPORARY|TEMP 允许在使用指定数据库时创建临时表|允许在使用指定数据库时间创建临时表 T
CONNECT 允许用户连接到指定的数据库 c

注:(注意数据库存取权限列为空时,数据库对用户的权限可能有区别)

(1)PUBLIC权限不收回时:

  1. 当数据库存取权限列为空(无显式权限)时,该对象所有可登录权限用户默认均有连接权限
  2. 除了超级用户,其他具有createdb权限的用户只能对owner为自己的数据库进行权限操作
  3. CONNECT权限被收回后,用户依然可以连接该库,且权限为Tc,用户权限小于PUBLIC的权限
  4. 创建的除超级用户的其他用户,初始对数据库权限均为Tc

(2)PUBLIC权限收回时:

  1. 数据库存取权限列不为空时,除超级用户外其他用户(包括属主用户)在数据库上的权限与存取权限显示一致
  2. 当数据库存取权限列为空(无显式权限)时,除超级用户外,所有用户均不可以登陆

实验测试:

环境说明

redhat 7.7 kingbase V9

/******************************************************* 测试准备 ********************************************************/ \c test system -- 创建普通用户 create user utyxl01 with password '123456'; create user utyxl02 with password '123456'; -- 创建超级用户 create user dbadmin with password '123456' superuser; -- 创建数据库管理用户 create user dbopra with password '123456' createdb; -- 由dbadmin创建数据库 \c - dbadmin create database db01; -- 由dbopra创建数据库 \c - dbopra create database db02;

测试一、PUBLIC权限不收回

test=> \l+ db* -- db01,db02数据库存取权限为空 数据库列表 名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限 | 大小 | 表空间 | 描述 ------+---------+----------+-------------+-------------+----------+-------+-------------+------ db01 | dbadmin | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | 14 MB | sys_default | db02 | dbopra | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | 14 MB | sys_default | (2 行记录) test=> \c db01 utyxl01 You are now connected to database "db01" as userName "utyxl01". -- utyxl01可以访问db01 db01=> \c db02 utyxl01 You are now connected to database "db02" as userName "utyxl01". -- utyxl01可以访问db02 /******************************************************************* 不同用户操作数据库 ********************************************************************/ test=> drop database db01; 错误: 必须是数据库 db01 的属主 -- db01属主为dbadmin, dbopra无法删除db01 test=> revoke CONNECT on DATABASE db02 from utyxl01; 警告: 不能撤销授权 -- db01属主为dbadmin, dbopra无法对db01数据库进行权限操作 REVOKE test=> drop database db02; -- db02属主为dbopra,可以删除db01 DROP DATABASE test=> create database db02; CREATE DATABASE test=> \c - dbadmin You are now connected to database "test" as userName "dbadmin". test=# drop database db01; DROP DATABASE test=# drop database db02; -- 超级用户可以对任何库操作 DROP DATABASE /******************************************************************* connect权限测试 ********************************************************************/ -- 恢复db01,db02 test=> \c - dbadmin You are now connected to database "test" as userName "dbadmin". test=# drop database db01; test=# \c - dbopra You are now connected to database "test" as userName "dbopra". test=> create database db02; CREATE DATABASE -- dbopra变更db02数据库对utyxl01用户权限 -- 1. 数据库存取权限列为空,测试数据库连接 test=> \l+ db02 数据库列表 名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限 | 大小 | 表空间 | 描述 ------+--------+----------+-------------+-------------+----------+-------+-------------+------ db02 | dbopra | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | 14 MB | sys_default | (1 行记录) test=> \c db02 utyxl01 -- db02存取权限为空,无显式权限,utyxl01可以连接db02 You are now connected to database "db02" as userName "utyxl01". -- 显式赋权,测试连接 test=> grant CONNECT on DATABASE db02 to utyxl01; -- 授予utyxl01对db02的连接权限 GRANT test=> \l+ db02 数据库列表 名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限 | 大小 | 表空间 | 描述 ------+--------+----------+-------------+-------------+-------------------+-------+-------------+------ db02 | dbopra | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =Tc/dbopra +| 14 MB | sys_default | | | | | | dbopra=CTc/dbopra+| | | | | | | | utyxl01=c/dbopra | | | (1 行记录) test=> \c db02 utyxl01 -- utyxl01=c/dbopra, utyxl01可以连接db02 You are now connected to database "db02" as userName "utyxl01". -- 回收connect,测试连接 db02=> \c db02 dbopra You are now connected to database "db02" as userName "dbopra". db02=> revoke CONNECT on DATABASE db02 from utyxl01 ; -- 回收utyxl01对db02的连接权限 REVOKE db02=> \l+ db02 数据库列表 名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限 | 大小 | 表空间 | 描述 ------+--------+----------+-------------+-------------+-------------------+-------+-------------+------ db02 | dbopra | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =Tc/dbopra +| 14 MB | sys_default | | | | | | dbopra=CTc/dbopra | | | (1 行记录) db02=> \c - utyxl01 -- =Tc/dbopra,utyxl01可以连接db02 You are now connected to database "db02" as userName "utyxl01". db02=> grant CREATE on DATABASE db02 to utyxl01; -- 授予utyxl01对db02的CREATE权限 GRANT db02=> \l+ db02 数据库列表 名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限 | 大小 | 表空间 | 描述 ------+--------+----------+-------------+-------------+-------------------+-------+-------------+------ db02 | dbopra | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =Tc/dbopra +| 14 MB | sys_default | | | | | | dbopra=CTc/dbopra+| | | | | | | | utyxl01=C/dbopra | | | (1 行记录) db02=> \c - utyxl01 -- =Tc/dbopra,utyxl01=C/dbopra utyxl01可以连接db02 You are now connected to database "db02" as userName "utyxl01". /************************************************************************** 综上: PUBLIC权限不收回时: 1. 当数据库存取权限列为空(无显式权限)时,该对象所有可登录权限用户默认均有连接权限 2. 除了超级用户,其他具有createdb权限的用户只能对owner为自己的数据库进行权限操作 3. CONNECT权限被收回后,用户依然可以连接该库,且权限为Tc,用户权限小于PUBLIC的权限 4.  创建的除超级用户的其他用户,初始对数据库权限均为Tc ***************************************************************************/

测试二、PUBLIC权限收回

db02=> revoke ALL on DATABASE db02 from PUBLIC ; -- 回收public在db02上的所有权限 REVOKE db02=> \l+ db02 数据库列表 名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限 | 大小 | 表空间 | 描述 ------+--------+----------+-------------+-------------+-------------------+-------+-------------+------ db02 | dbopra | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | dbopra=CTc/dbopra+| 14 MB | sys_default | | | | | | utyxl01=C/dbopra | | | (1 行记录) db02=# \c db02 utyxl02; -- utyxl02用户连接db02失败 致命错误: 访问数据库"db02"的权限不够 描述: 用户没有CONNECT权限. Previous connection kept db02=# \c db02 utyxl01; -- utyxl01用户连接db02失败 致命错误: 访问数据库"db02"的权限不够 描述: 用户没有CONNECT权限. Previous connection kept -- 回收拥有者连接权限 db02=> \l+ db02 数据库列表 名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限 | 大小 | 表空间 | 描述 ------+--------+----------+-------------+-------------+------------------+-----------+-------------+------ db02 | dbopra | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | dbopra=CT/dbopra+| No Access | sys_default | | | | | | utyxl01=C/dbopra | | | (1 行记录) db02=> \c db02 dbopra -- 数据库属主dbopra不能连接数据库 致命错误: 访问数据库"db02"的权限不够 描述: 用户没有CONNECT权限. Previous connection kept -- 回收数据库所有显式权限 db02=> revoke ALL on DATABASE db02 from dbopra; REVOKE db02=> revoke ALL on DATABASE db02 from utyxl01; REVOKE db02=> \l+ db02 -- db02数据库存取权限为空,无显式权限 数据库列表 名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限 | 大小 | 表空间 | 描述 ------+--------+----------+-------------+-------------+----------+-----------+-------------+------ db02 | dbopra | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | No Access | sys_default | (1 行记录) db02=> \c db02 dbopra 致命错误: 访问数据库"db02"的权限不够 描述: 用户没有CONNECT权限. Previous connection kept db02=> \c db02 utyxl02 致命错误: 访问数据库"db02"的权限不够 描述: 用户没有CONNECT权限. Previous connection kept db02=> \c - dbadmin -- 除超级用户,其他用户均不可以连接(包括sso,sao) You are now connected to database "db02" as userName "dbadmin". /************************************************************************* 综上: PUBLIC权限收回时: 1. 数据库存取权限列不为空时,除超级用户外其他用户(包括属主用户)在数据库上的权限与存取权限显示一致 2.  当数据库存取权限列为空(无显式权限)时,除超级用户外,所有用户均不可以登陆 **************************************************************************/
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论