数据库版本:KingbaseES V008R006C008B0014
文章目录如下
1. 用户安全的定义
数据库中关于安全的用户一般包含3种:
- 数据库管理员(DBA)
- 安全管理员(SSO)
- 审计管理员(SAO)
它们各自负责管理和维护数据库系统的日常运行。安全管理员确保数据库中的数据安全性,而审计管理员负责执行数据库审计策略以监控和记录数据库活动,在数据库初始化完成后自动创建这3个用户。
KingbaseES安全版本支持将管理特权三权分立为DBA、SSO、SAO,用于解决数据库超级用户权力过度集中的问题,参考行政、立法、司法三权分立的原则来设计的安全管理机制。
1.1. 系统管理员(DBA)
- 特级权限:负责数据库日常管理的各种操作和自主存取控制;
- 审计权限:无法修改审计参数,无法定义审计策略,无法查看审计记录;
- 安全权限:无法执行安全功能的操作。
1.2. 安全管理员(SSO)
- 特级权限:负责强制访问规则的制订和管理,监督SAO和普通用户操作,无法创建和操作普通对象;
- 审计权限:只能设置、删除对SAO和普通用户的审计策略,只能查看SAO和普通用户的审计结果记录;
- 安全权限:可以开启安全参数,执行安全相关操作。
1.3. 审计管理员(SAO)
- 特级权限:负责数据库的审计,监督DBA、SSO的操作,不能创建和操作普通对象;
- 审计权限:可以开启审计参数,可以设置、删除对SSO和DBA的审计策略,只能查看SSO和DBA的审计结果记录;
- 安全权限:无法执行安全功能的操作。
2. 用户管理
2.1. 查询用户信息
查询用户权限可以通过视图 sys_user 查看
SELECT * FROM sys_user;
- usename:用户名
- usesysid:用户ID
- usecreatedb:创建数据库权限
- usesuper:超级用户权限
- userepl:开启流复制、将系统转入/转出备份模式权限
- usebypassrls:绕过所有行级安全性策略权限
- passwd:不是口令(显示*****)
- valuntil:口令过期时间(只用于口令认证)
- useconfig:运行时配置变量的会话默认值
2.2. 创建用户
创建用户最基础的用法:
CREATE USER 用户名 WITH PASSWORD '密码';
- 由于没有授权,所以默认只有登录和操作表权限,无法创建库。
创建用户时赋予多种权限,直接写在with后面
CREATE USER 用户名 WITH [权限1] [权限2] [权限3]...;
比如赋予创建库、登录权限
CREATE USER u1 WITH CREATEDB LOGIN PASSWORD '123';
详细权限如下:
- SUPERUSER:超级用户权限
- CREATEDB:创建数据库权限
- CREATEROLE:创建用户、角色权限
- LOGIN:登录权限(默认开启)
- REPLICATION:是否为复制角色
- BYPASSRLS:安全测试RLS
- SYSBACKUP:物理备份权限
如果不赋予该权限,在关键字前面加上 NO,比如创建用户u1没有物理备份权限
CREATE USER u1 WITH NOSYSBACKUP;
2.3. 修改用户
修改用户有如下限制:
- 系统管理员可以修改所有普通用户密码、权限;
- 普通用户只能修改自己的密码,不能修改其他用户;
- 安全管理员的密码只能自己修改;
- 审计管理员的密码只能自己修改。
修改用户密码
ALTER USER 用户名 PASSWORD '密码';
修改用户权限
ALTER USER 用户名 [权限1] [权限2];
比如修改用户 u1 权限为创建库、物理备份:
ALTER USER u1 CREATEDB SYSBACKUP;
- SUPERUSER:超级用户权限
- CREATEDB:创建数据库权限
- CREATEROLE:创建用户、角色权限
- LOGIN:登录权限(默认开启)
- REPLICATION:是否为复制角色
- BYPASSRLS:安全测试RLS
- SYSBACKUP:物理备份权限
2.4. 删除用户
删除用户语法:
DROP USER 用户名;
如果被删除的用户在某个数据库中被引用,则无法被删除。比如用户 u1 创建了一张表,删除 u1 失败
通过如下方式删除当前库中关于某个用户的全部对象
DROP OWNED BY 用户名 CASCADE;
2.5. 用户资源限制
1、连接数限制
用户连接数受参数 connections_limit_per_user 影响:
- on:启动用户连接数限制。超级用户默认限制连接数为8,普通用户为5;
- off:关闭用户连接数限制。所有用户默认使用最大连接(受max_connections影响)。
创建用户时限制连接(connections_limit_per_user = on 有效):
CREATE USER 用户名 WITH CONNECTION LIMIT 连接数;
- -1 表示无限制
修改用户连接数限制
ALTER USER 用户名 CONNECTION LIMIT 连接数;
2、用户使用期限
限制后会在指定时间点后,角色口令自动失效
创建用户
CREATE USER 用户名 WITH VALID UNTIL '日期';
修改用户
ALTER USER 用户名 VALID UNTIL '日期';
3、用户连接期限
设置某个用户只能在 xxx 时间段能够连接
创建用户
--设置用户只能在08点到15点连接
CREATE USER 用户名 WITH CONNECTION INTERVALS '08:00:00 TO 15:00:00';
修改用户
--设置用户只能在08点到15点连接
ALTER USER 用户名 CONNECTION INTERVALS '08:00:00 TO 15:00:00';