达梦数据库用户与权限管理
- 用户管理
- 口令策略
- 管理用户
- 资源限制
- 权限管理
- 一般权限
- 特殊权限
- 角色管理
用户管理
达梦数据库安装后创建的内置用户:
- SYS:内置用户,不允许登录。该用户下有常用的数据字典;
- SYSDBA:系统管理员,拥有除审计和强制访问控制之外的所有权限;
- SYSAUDITOR:系统审计管理员;
- SYSSSO:系统安全管理员,有强制访问控制的权限;
- SYSDBO:安全对象操作员,仅安全版本才有。
达梦数据库中支持通过SQL和manager图形化工具两种方式对用户进行管理。
口令策略
达梦用户的登录口令策略由隐含参数PWD_POLICY
控制。其值默认为2。
- 0:无策略;
- 1:禁止与用户名相同;
- 2:口令长度需大于等于ini参数PWD_MIN_LEN(默认为9);
- 4:至少包含一个大写字母(A-Z);
- 8:至少包含一个数字(0-9);
- 16:至少包含一个特殊字符(除"和空格以外的英文字符)。
口令策略可以组合设置,如果要同时应用策略1、2、4、8,只需设置策略为1+2+4+8=15
即可。
查看生效的口令策略:
select * from v$parameter t where t.name='PWD_POLICY';
修改口令策略:
alter system set 'PWD_POLICY'=15 both;
管理用户
创建用户:
create user HRTEST identified by HRPass2024; --创建用户时指定默认表空间
create user HRTEST identified by HRPass2024 default tablespace DMDATA default index tablespace DMINDEX;--创建用户时指定不限制尝试登录失败的次数(默认连续登录三次失败会锁定账户)
create user HRTEST identified by HRPass2024 limit failed_login_attemps unlimited
default tablespace DMDATA default index tablespace DMINDEX;
检查用户信息:
select * from dba_users;select p.username,t.* from sysusers t,dba_users p where t.id=p.user_id;
锁定和解锁账户:
alter user HRTEST account lock;alter user HRTEST account unlock;
变更用户信息:
--修改用户密码
alter user HRTEST identified by "NewPass2024";--修改用户默认表空间
alter user HRTEST default tablespace TESTO;
删除用户:
drop user if exists HRTEST;--CASCADE会级联删除用户下的数据库对象信息(慎用!)
drop user if exists HRTEST cascade;
如果不小心忘记了SYSDBA用户口令,可以通过以下两种方法解决:
-
通过其他有ALTER USER权限的用户来重置SYSDBA用户口令。
-
数据库提前打开了操作系统认证参数 ENABLE_LOCAL_OSAUTH。该参数为静态隐含参数,需要DBA权限修改,修改后重启数据库生效。
资源限制
查看用户的资源限制:
select p.username,t.failed_num,t.failed_attemps,
t.life_time,t.lock_time,t.sess_per_user
from sysusers t,dba_users p where t.id=p.user_id;select * from sysusers;
有两种方式可以限制用户资源。一是使用LIMIT子句,二是通过Profile管理用户资源。
通过LIMIT子句限制用户失败的次数:
alter user HRTEST limit failed_login_attemps 5, password_lock_time 3;
通过Profile限制用户资源:
create profile PROF_LOGIN_01 limit failed_login_attemps 5, password_lock_time 3, password_life_time 180; alter user HRTEST profile PROF_LOGIN_01;
查询用户的Profile资源限制信息:
select a.pid profile_id, b.name profile_name, a.uid userid, c.name username
from sysuserprofiles a, sysobjects b, sysobjects c
where a.pid = b.id and a.uid = c.id;select * from dba_profiles;
select * from sysusers;
🕷 特殊字符口令:如果用户口令中含有单引号、双引号、$等特殊字符,Linux命令行中可以使用反斜杠进行转义。
权限管理
查询用户所拥有的权限:
select * from dba_sys_privs where grantee='HRTEST';
select * from dba_tab_privs where grantee='HRTEST';
select * from dba_role_privs where grantee='HRTEST';
一般权限
授予和撤销用户的数据库系统权限:
grant create table to HRTEST;
revoke create table from HRTEST;
授予和撤销用户的数据库对象权限:
--授予/撤销表对象权限
grant select,update,insert,delete on DMHR.EMPLOYEE to HRTEST;
revoke select,update,insert,delete on DMHR.EMPLOYEE from HRTEST;--授予/撤销列对象权限
grant select(employee_id,employee_name) on DMHR.EMPLOYEE to HRTEST;
revoke select(employee_id,employee_name) on DMHR.EMPLOYEE from HRTEST;
赋予对象权限时加上 WITH GRANT OPTION 表明权限可以转授。这种赋权撤销时需要加上 CASCADE 关键字。
grant select on DMHR.EMPLOYEE to HRTEST with grant option;--撤销权限报错
revoke select on DMHR.EMPLOYEE from HRTEST;--撤销权限成功
revoke select on DMHR.EMPLOYEE from HRTEST cascade;
特殊权限
默认不能授予用户在其他用户模式下的DDL权限(即使是SYSDBA也不行)。
--授权成功
grant select any table to HRTEST;--授权失败,报错 Grantor no granted privilege
grant create any table,create any index to HRTEST;
该限制由参数ENABLE_DDL_ANY_PRIV
控制,默认为0。
select * from v$parameter where name='ENABLE_DDL_ANY_PRIV';--放开DDL的ANY权限限制
alter system set 'ENABLE_DDL_ANY_PRIV'=1 both;--授权成功
grant create any table,create any index to HRTEST;
角色管理
角色是权限的集合。达梦数据库中包含以下几种角色:
- DBA:拥有除审计和强制访问控制之外的所有权限,默认给SYSDBA用户。
- PUBLIC:具有对当前模式下对象的DML权限。
- RESOURCE:具有在当前模式下的DDL权限(建表、索引、视图等)。
- SOI:具有查询
sys
开头的系统表的权限。 - VTI:具有查询
v$
开头的动态性能视图的权限。 - DB_AUDIT_开头的:审计相关的权限集合,默认给SYSAUDITOR用户。
- DB_POLICY_开头的:安全相关的权限集合,默认给SYSSSO用户。
如果查询时收到报错:没有[V$CIPHERS]
对象的查询权限,可以授予用户VTI角色。
查询角色信息:
select * from dba_roles;
通过角色授权:
--定义角色
create role R1;
grant create table to R1;
grant select on dmhr.employee to R1;--通过角色授予权限
grant R1 to HRTEST;
grant R1 to HRAPP;
禁用/启用角色:
--禁用角色
call SP_SET_ROLE('R1',0);--启用角色
call SP_SET_ROLE('R1',1);