已索引

预定义用户

SYS:系统内置管理员,不允许登录,缺省数据字典和动态视图OWNER。
SYSDBA:系统管理员(管理用户),缺省系统管理员和数据库管理员,拥有几乎所有权限(除审计和强制访问控制)
SYSAUDITOR:系统审计员(审计用户),缺省系统审计管理员和数据库审计管理员,具有审计相关权限。
SYSSSO:系统安全员(安全用户),缺省系统标记管理员和数据库标记管理员,具有强制访问控制等权限。
SYSDBO:安全版本才有的用户,安全操作员。

密码复杂度策略

PWD_POLICY 参数指定系统的口令策略(默认为 2),该参数是一个隐藏参数,在 dm.ini 和 console 中是看不到的。
可以通过命令 "show parameter pwd" 或视图 "v$parameter" 查看。
如果要修改,只能通过函数或者 alter system 修改。

系统支持的口令策略有:

  • 0 无策略
  • 1 禁止与用户名相同
  • 2 口令长度不小于 9 (默认)
  • 4 至少包含一个大写字母(A-Z)
  • 8 至少包含一个数字(0-9)
  • 16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)

口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口令策略为 2+4=6 即可。
生产建议所有值相加,和为:31。

密码带有特殊字符的登录处理:

SQL> alter user hrtest IDENTIFIED by "Dameng@123";
SQL> conn hrtest/"Dameng@123"
$ disql hrtest/'"Dameng@123"'

密码管理策略

参考文档:DM8 安全管理 > 资源限制。
DM 新版本已经支持使用 profile 来管理用户的密码管理策略。

  • FAST_LOGIN
    --- FAST_LOGIN 是 dm.ini 中的参数,它决定了是否在登录时记录登录失败历史信息,会影响 FAILED_LOGIN_ATTEMPTS 的效果。该参数为静态参数,默认值为 2,表示异步记录,当同一个用户的登录失败记录数超过 100,则清理前面过早的登录失败记录,避免登录相关系统表 SYSACCHISTORIES 膨胀;AutoParaAdj5.0 脚本会将该参数设置为 1,表示不记录;如果为 0 表示同步记录。
  • FAILED_LOGIN_ATTEMPTS
    --- 账户被锁定前连续登录失败的次数。默认值为3,最大值 100,最小值 1。系统预设管理员用户无限制。
  • PASSWORD_LOCK_TIME
    --- 如果超过 FAILED_LOGIN_ATTEMPTS 设置值,一个账户将被锁定的分钟数,默认值 1。最大值 1440,最小值 1。管理员不受此限制。
  • PASSWORD_LIFE_TIME
    --- 一个口令在其终止前可以使用的天数,默认无限制。若要设置,最大值 365,最小值 1。
  • PASSWORD_GRACE_TIME
    --- 以天为单位的口令过期宽限时间,过期口令超过该期限后,禁止执行除修改口令以外的其他操作。默认值为10,最大值 30,最小值 1。系统预设管理员用户无限制。注意,当 PASSWORD_GRACE_TIME 为 UNLIMITED 时不能设置 PASSWORD_LIFE_TIME。
  • PASSWORD_REUSE_TIME
    --- 一个口令在可以重新使用前必须经过的天数,默认无限制。若要设置,最大值 365,最小值 1。
  • PASSWORD_REUSE_MAX
    --- 一个口令在可以重新使用前必须改变的次数,默认无限制。若要设置,最大值 32768,最小值 1。
  • INACTIVE_ACCOUNT_TIME
    --- 指定用户的非活跃时间,用户超过指定时间未登录将被自动锁定,默认无限制,最大值 24855,最小值 15。

可以通过 SYSUSERS 视图来查看用户的密码策略:

SQL> select a.USERNAME,
            b.FAILED_NUM,    --- 用户登录失败次数限制
            b.FAILED_ATTEMPS, --- 用户自上一次成功登录以来的失败登录次数
            b.LOCK_TIME,
            b.LIFE_TIME,
            b.GRACE_TIME,
            b.REUSE_TIME,
            B.REUSE_MAX
from dba_users a 
join sysusers b 
on a.USER_ID=b.ID 
order by b.ID;

LINEID     USERNAME   FAILED_NUM  FAILED_ATTEMPS LOCK_TIME   LIFE_TIME   GRACE_TIME  REUSE_TIME  REUSE_MAX  
---------- ---------- ----------- -------------- ----------- ----------- ----------- ----------- -----------
1          SYS        0           0              0           0           0           0           0
2          SYSDBA     0           0              0           0           0           0           0
3          SYSAUDITOR 0           0              0           0           0           0           0
4          SYSSSO     0           0              0           0           0           0           0
5          XINLIAN    3           0              1           0           10          0           0
6          XUWANG     3           0              1           0           10          0           0

6 rows got

used time: 75.278(ms). Execute id is 32900612.

修改用户密码策略的命令示例如下:

alter user hr LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3;

资源限制

参考文档:DM8 安全管理 > 资源限制。
我们一般都不会去做资源限制,这儿仅供查阅参考。

GLOBAL_SESSION_PER_USER:在所有 DSC 实例中,一个用户可以同时拥有的会话数量,默认值是最大值。
SESSION_PER_USER:在一个实例中,一个用户可以同时拥有的会话数量,默认值是最大值(安全版是 4096)。
CONNECT_TIME:一个会话连接、访问和操作数据库服务器的时间上限。默认无限制。
CONNECT_IDLE_TIME:会话最大空闲时间,默认无限制。
CPU_PER_SESSION:一个会话允许使用的 CPU 时间上限(单位:秒),默认无限制。
CPU_PER_CALL:用户的一个请求能够使用的 CPU 时间上限(单位:秒),默认无限制。
READ_PER_SESSION:会话能够读取的总数据页数上限,默认无限制。
READ_PER_CALL:每个请求能够读取的数据页数,默认无限制。
MEM_SPACE:会话占有的私有内存空间上限(单位:MB),默认无限制。

用户 IP 地址限制和用户时间段限制

IP 地址设置项包括 ALLOW_IP(允许的 IP 地址)和 NOT_ALLOW_IP(不允许的 IP 地址)
用户时间段设置项包括 ALLOW_DATETIME(允许的时间段)和 NOT_ALLOW_DATETIME(不允许的时间段)
默认都为空,表示不做限制,当两者同时出现时,禁止优先。

IP 需要用双引号括起来,中间用逗号隔开,如"192.168.0.29","192.168.0.30",也可以利用来设置网段,如"192.168.0."。
时间段中的日期和时间要分别用双引号括起来。可以指定一个具体的时间段,也可以指定一个重复的时间段。

例如:

CREATE USER USER3 IDENTIFIED BY "USER3_psd"
ALLOW_IP "192.168.0.*" ALLOW_DATETIME MON "8:30:00" TO FRI "17:30:00";

CREATE USER USER4 IDENTIFIED BY "USER4_psd"
ALLOW_IP "192.168.0.29", "192.168.0.30" 
ALLOW_DATETIME "2016-1-1" "8:30:30" to "2016-12-12" "17:30:00";

创建用户

ENABLE_LOCAL_OSAUTH 表示是否支持本机操作系统认证,默认为0(不支持),如果要支持,则设置为1(不建议)。

create tablespace nscfs_tbs datafile 'nscfs_tbs01.dbf' size 1024 autoextend on next 2 maxsize 30720; [CACHE=NORMAL|"KEEP"]; -- 单位为M,不能指定单位。
create user nscfs IDENTIFIED by xxxx DEFAULT TABLESPACE NSCFSTBS; [DISKSPACE LIMIT 1024|unlimited];
grant VTI to nscfs;
grant SOI to nscfs;
grant resource to nscfs;

用户创建后,默认就会有 create session 的系统权限和 PUBLIC 角色。如果是图形界面创建的用户,还会自动分配:VTI 和 SOI 角色。
一般我们创建用户后,还需要给用户 resource 角色(跟 Oracle 不同的是,达梦的 RESOURCE 包含了 create view 权限)。

修改用户的默认表空间

alter user hr DEFAULT TABLESPACE dmtbs;

删除用户

drop user if EXISTS hr;
drop user if EXISTS hr CASCADE; --生成环境慎用

用户锁定和解锁

alter user hr ACCOUNT UNLOCK;
alter user hr ACCOUNT LOCK;

用户权限查询与分配

相关数据字典:

select * from dba_sys_privs t where t.GRANTEE= 'DMTEST';
select * from dba_tab_privs t where t.GRANTEE= 'DMTEST';
select * from dba_role_privs t where t.GRANTEE= 'DMTEST';

分配对象权限:

grant select (employee_id, employee_name) on dmhr.employee to hrtest;

分配系统权限:

grant select any table to hrtest;

DM 默认不能授予用户在其他模式下数据定义( DDL )的权限,由参数 ENABLE_DDL_ANY_PRIV 指定,默认为 0。

select * from v$parameter t where name like '%ENABLE_DDL_ANY_PRIV%';
alter SYSTEM set 'ENABLE_DDL_ANY_PRIV' = 1 both; --开启后可正常赋予权限
grant create any table to hrtest;
grant create any index to hrtest;

角色管理

角色是权限的集合,角色使权限管理更加方便。
DBA:具有几乎所有权限(除审计和强制访问控制之外),默认赋给 SYSDBA 用户。
PUBLIC:具有对当前模式下对象的 DML 数据操作权限。
RESOURCE:具有在当前模式下数据定义权限(创建表、索引、视图等),
SOI:具有查询 sys 开头系统表的权限
VTI:具有查询 v$开头的动态视图权限,若不给,用户在“右击表名 > 修改”时,报 5504 错误:没有 [SYS.V$CIPHERS]对象的查询权限

sp_set_role('R1',0) --角色禁用和启用,禁用后角色权限将不在生效。

dba ---> cy ----> cfop
则,只有 cy 能回收 cfop 的权限, dba 要回收 cy 的权限时,不加 cascasde会报错。

模式管理

模式归属用户。
当系统建立一个用户时,会自动生成一个对应的模式。
用户还可以建立其他模式,用户和模式是一对多的管理,一个用户可以拥有多个模式,一个模式仅能归属于一个用户。

--查看模式

select t.* from SYSOBJECTS t where t."TYPE$" ='SCH'; 
`SYSOBJECTS 与 dba_objects 有什么区别?`

--查看用户

select t.* from SYSOBJECTS t where t."SUBTYPE$" ='USER'; 

--查看模式和用户的关系

select a.id as schema_id, a.name as schema_name, b.id as user_id, b.name as user_name
from SYSOBJECTS a, SYSOBJECTS b 
where a.pid = b.id and a."TYPE$" = 'SCH';
这儿的pid 是用户id

--创建模式

create schema hrtest01 AUTHORIZATION HRTEST;
create table hrtest01.t_test(id int, name varchar(20));

--查看当前模式和当前用户

select sys_context('USERENV','CURRENT_SCHEMA');
select sys_context('USERENV','CURRENT_USER');

--切换模式(只针对当前会话生效)

set SCHEMA dmhr;

--删除模式

drop SCHEMA IF EXISTS HRTEST01;
drop SCHEMA IF EXISTS HRTEST01 CASCADE; --级联删除模式下对象,生产环境慎用。

默认模式不能删除。是否可以修改?

-- By 许望(RHCA、OCM、VCP)
最后修改:2025 年 07 月 03 日 12 : 01 PM
如果觉得我的文章对你有用,请随意赞赏