达梦数据库用户与权限管理

发布于:2024-04-03 ⋅ 阅读:(337) ⋅ 点赞:(0)

用户管理

达梦数据库安装后创建的内置用户:

  • 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用户口令,可以通过以下两种方法解决:

  1. 通过其他有ALTER USER权限的用户来重置SYSDBA用户口令。

  2. 数据库提前打开了操作系统认证参数 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);

网站公告

今日签到

点亮在社区的每一天
去签到