数据库安全以保护数据库系统中的数据为目的,防止数据被泄露、篡改、破坏的机制。数据库系统存储着各类重要、敏感的数据,作为多用户的系统,为不同的用户提供适当的权限尤为重要。本章主要介绍数据库安全基础中常用的方法,包括用户权限控制和审计,具体内容将从基本概念、使用方法以及应用场景等三个方面详细阐述。
权限指执行某些特定SQL语句的能力以及访问和维护特定对象的能力。
权限分为了系统权限和对象权限:
权限 | 作用 |
---|---|
系统权限 | 用户可以执行一类特定的SQL语句。 |
对象权限 | 用户可以访问或维护某一特定对象。 |
系统权限
系统权限 | 权限说明 |
---|---|
CREATE SESSION | 连接数据库 |
CREATE USER | 创建新用户 |
ALTER USER | 修改用户信息 |
DROP USER | 删除用户 |
CREATE ROLE | 创建新角色 |
DROP ANY ROLE | 删除任意角色 |
GRANT ANY PRIVILEGE | 授予/回收任意系统权限 |
GRANT ANY ROLE | 授予/回收任意角色 |
GRANT ANY OBJECT PRIVILEGE | 授予任意用户的对象的权限 |
…… | …… |
用户进行系统操作的能力,目前支持60多种系统权限。系统管理员(SYS用户、DBA角色)拥有所有系统权限。
对象权限
对象权限 | 权限说明 |
---|---|
SELECT | 访问其他用户的对象 |
DELETE | 删除其他用户的对象数据 |
UPDATE | 更新其他用户的对象数据 |
ALTER | 更改其他用户的对象定义 |
INSERT | 往其他用户的对象插入数据 |
INDEX | 创建索引 |
…… | …… |
对象是指表、视图和序列等。对象的所有者(即创建对象的用户)和系统管理员(SYS用户、DBA角色)拥有该对象的所有权限。
数据库用户的作用主要是用来连接数据库,以及访问数据库对象和执行SQL语句。
Gauss DB100的用户分为:
用户 | 作用 |
---|---|
系统管理员 | 具有数据库的最高权限,并且具有所有的系统权限和对象权限(如SYS用户、SYSDBA用户)。 |
安全管理员 | 具有CREATE USER权限的帐户。 |
普通用户 | 普通用户默认具有PUBLIC对象权限,没有其他任何权限,需要系统管理员通过GRANT语句赋权。 |
用户创建
语法格式:
用户名(user_name)不允许包含以下特殊字符:
分号(;)、竖线(|)、反引号(`)、美元符($)、位运算(&)、大于号(>)、小于号(<)、双引号(“)、单引号(‘)、感叹号(!)、空格和版权符号(©),用双引号或者反引号括起来也不可以。
设置用户名密码(password)时,需遵循如下规范:
密码长度必须大于等于8个字符,小于等于64个字符。
若密码不以单引号括起来,则密码首字符必须是字母、#号或下划线。
密码不能与用户名或者用户名的倒序相同(校验时,不区分大小写)。
密码只能包含以下4种类型,并且至少选取其中3种类型的组合。
数字、小写字母、大写字母、空格或特殊字符(GaussDB 100支持的特殊字符列表,请参见下页的“特殊字符”表)。
创建密码时,若密码中包含_#$以外的特殊字符或者空格,则密码须用单引号括起来。
若创建的密码中包含特殊字符$,通过zsql连接数据库时密码在单引号里面$不需要使用\转义字符转义,密码不在单引号里面$需要使用\转义字符转义,否则会登录失败。
用户的修改
语法格式:
应用场景:修改用户密码。手动锁定用户或给用户解锁。给用户指定配置档案。定义用户默认表空间。
用户的删除
语法格式:
if exists:要删除的用户是否存在。
不指定if exists选项时,如果要删除的用户不存在,会提示错误信息。
指定if exists选项时,如果要删除的用户不存在,直接返回执行成功,用户存在则删除该用户。
CASCADE
不指定CASCADE选项时,如果要删除的用户中还有数据库对象没有删除,会提示错误信息。
如果指定CASCADE选项,删除该用户时,会同步强制删除属于该用户的数据库对象。
请谨慎使用删除用户操作,即使删除过程中断,已经删除的对象也无法恢复,建议先删除该用户创建的数据库对象,再删除用户。
角色是一组命名的权限的集合,数据库使用角色进行权限组织及划分。
一个数据库可能有多个用户需要访问,为了方便管理,可以先将权限分组,并授予给角色。每一个权限组对应一个角色。对于不同权限级别的用户,可以将对应的角色授予用户,相当于批量授予用户需要的权限,而不需要逐个授予权限。
系统默认角色:
角色 | 作用 |
---|---|
DBA系统管理员角色。 | 具有所有系统权限,该角色不可删除。 |
RESOURCE创建基础对象的角色。 | 具有创建存储过程、函数、触发器、表、序列的权限。 |
CONNECT连接角色。 | 具有连接数据库的权限。 |
STATISTICS统计角色。 | 具有创建、查看WSR快照、生成WSR报告的权限,但是没有修改设置WSR参数的权限。 |
用户、角色和权限的关系
用户可定义角色,角色为多个权限的集合。
角色赋予用户或其他角色,则用户或其他角色拥有了此角色的所有权限。
角色的权限可以继承。
系统权限授予
将权限或角色授予给用户或其他角色。
语法格式:
system_privilege_name:系统权限名。
grantee:被授予的用户或角色。
WITH ADMIN OPTION:被授予的用户或角色可将所获得的系统权限再次授予其它用户或角色。
角色的授予
语法格式:
role_name:角色名。
grantee:被授予的用户或角色。
WITH ADMIN OPTION:被授予的用户或角色可将所获得的角色再次授予其它用户或角色。
对象的授权
语法格式:
object_privilege_name:对象权限名。
object_name:对象名。
grantee:被授予对象权限的用户或角色。
WITH GRANT OPTION:被授予的用户可将获得的对象权限再次授予其它用户或角色。
系统权限回收
语法格式:
将权限或角色从受权者回收。
system_privilege_name:系统权限名。
revokee:被回收权限的用户或角色。
角色的回收
role_name:角色名
revokee:被回收权限的用户或角色。
对象权限的回收
object_privilege_name:对象权限名。
object_name:对象名。
revokee:被回收对象权限的用户或角色。
系统权限、角色和对象权限在不使用时需及时回收。
数据库审计属于数据库安全技术之一。审计主要用于实时监视并记录在数据库系统中用户的操作行为。用户操作行为的结果记录在审计日志中。审计日志是安全事件中事后追溯、定位问题原因及划分事故责任的重要手段。
语法格式:
AUDIT_LEVEL = 0:关闭审计日志,不推荐使用。
AUDIT_LEVEL > 0:开启审计日志,同时还会对用户登录、注销等请求进行审计。
默认值为3。
AUDIT_LEVEL取值(十进制) | 审计日志类型 | 审计范围 |
---|---|---|
1 | DDL | 数据库对象的创建、修改、删除,包括:表、索引、视图、序列、用户、角色、表空间、profile、会话等。 |
2 | DCL | 设置或更改数据库事务、用户权限、锁表等。 |
4 | DML | 对数据库表中的数据进行操作,如插入、更新、删除,也包括查询审计。 |
8 | PL | 对存储过程的解析与执行进行审计,如EXECUTE(可简写为EXEC)与CALL等操作的调用。 |
如果需要审计对应内容,可将AUDIT_LEVEL赋值为相应的标识之和。例如,如果需要同时审计DCL和DML操作,则设置AUDIT_LEVEL的值为6。
查看当前审计级别:
查看审计日志:
以数据库安装用户登录数据库服务器,并进入审计日志目录:
查看审计日志:
过滤审计内容:
例如筛选出包含OMM的审计内容:
审计日志内容包括:
事件发生的日期时间、会话ID、语句ID、用户名、主机地址、事件类型、事件结果和SQL语句等。