1 权限管理介绍
1.1 数据库权限管理的意义
用户管理及权限管理一直是应用系统中不可缺少的一个部分。系统用户很多,系统功能也很多。不同用户对系统功能的需求不同,出于安全等考虑,关键的、重要的系统功能需限制部分用户的使用;出于方便性考虑,系统功能需要根据不同的用户而定制。
GaussDB for DWS是一款高性能、高可靠、高可用性的关系型分析场景数据仓库,支持严格的数据库管理系统的用户、权限管理机制以保障用户数据的安全性和可用性。
1.2 DWS权限管理的功能
GaussDB for DWS支持灵活的权限管理,可以控制一个角色(组、用户)对某张表的读、写、更新、删除等操作权限、执行某个函数的权限以及操作(使用、更新等)视图、序列的权限。
DWS的权限管理功能非常强大,可以细化到对一张表的各个字段,比如禁止用户访问一张表里的密码字段等,在稍后的内容中给出详细的解释。
2 用户、数据库和模式的关系
很多人对用户、数据库、模式之间的关系感觉很模糊,以下介绍了这三者之间的关系:
(1)、用户是独立于数据库和模式之上的全局对象,删除数据库并不会删除用户;
(2)、模式(表、函数、视图等)是数据库内部的对象,是一种逻辑命名空间,不同的数据库可以有相同的模式名,但是删除数据库的同时会将内部所有对象全部删除;
(3)、数据库和模式都有自己的属主用户,此用户对于属于它们自己的数据库和模式可以执行最大操作,如删除数据库、删除模式等等;
3 权限的分类和使用
3.1 系统权限
系统权限又称为用户属性,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN和LOGIN。
(1)、其中SYSADMIN是系统管理员权限,可以操作所有数据库对象的所有对象,包括创建、删除、连接数据库的权限;创建、删除用户,给用户授权等;表、视图、函数等的对象的DDL和DML操作。一般用ALTER USER和CREATE USER语法创建,通过GRANT和REVOKE ALL PRIVILEGES方式授予或者撤销。示例如下:
(2)、CREATEDB权限和CREATEDB分别是创建数据库和创建用户的权限,示例如下:
(3)、AUDITADMIN权限是审计管理权限,只有拥有AUDITADMIN属性的用户才可以查看审计记录,示例如下:
U6是普通用户无法查看审计日志
授予审计权限后,即可查询审计日志
(4)、LOGIN权限控制用户是否可以登陆数据库,创建的用户默认带此权限(PUBLIC默认权限组中),示例如下:
3.2 对象权限
对象权限是只将数据库、模式、模式下的对象(表、视图、函数、表空间、字段等)
的权限授予用户,下面分别介绍:
(1)、数据库权限
数据库只拥有连接权限(connect)、在数据库内创建模式的权限(create)、创建临时表的权限(temp)。一个用户是否能访问数据库里面的模式、表、函数这些内容由这些对象的权限决定
例子:
默认情况下新建一个用户会默认具有连接所有数据库的权限而且会自动创建一个同名的模式,如果想收回一个用户连接某个数据库的权限怎么做呢?
新建测试用户U5;
尝试使用U5连接数据库,连接成功
revoke connect on database test from U5;尝试回收U5用户的连接权限后连接,依然能够连接
revoke connect on database test from public;尝试回收公共权限组的connect权限后连接失败
(2)、模式的权限
模式拥有创建对象的权限(create)和usage权限,模式中的表或者视图对象授权给其他用户时,需要将表或视图所属的模式的USAGE权限同时授予该用户,若没有该权限,则只能看到这些对象的名字,并不能实际进行对象访问。
例子:
创建测试表bzf.t
使用普通用户u4登陆后查询测试表,报错无权限
授予u4用户对表t的select权限
继续查询测试表,依然报错
授予u4对schema的usage权限后查询成功
(3)、模式内其他对象的权限
模式内对象的权限管理方法基本一致,在拥有模式和数据的相应权限后,根据对象类型不同grant授予即可。不做详细描述,具体方法见下图:
3.3 角色权限
一个角色和一个用户可以看做一个拥有一组权限的集合体,可以将一个这个集合权限
授予另外一个角色或者用户。
示例:
Grant role1 to role2;
4 PUBLIC默认权限组
关键字PUBLIC表示该权限要赋予所有角色,包括以后创建的用户。PUBLIC可以看做是一个隐含定义好的组,它总是包括所有角色。任何角色或用户都将拥有通过GRANT直接赋予的权限和所属的权限,再加上PUBLIC的权限。
PUBLIC的权限包括数据库的CONNECT权限和CREATE TEMP TABLE权限、函数的EXECUTE特权、语言和数据类型(包括域)的USAGE特权
另外,这些初始的默认权限可以使用ALTER DEFAULT PRIVILEGES命令修改。