已索引
预定义用户
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; --级联删除模式下对象,生产环境慎用。
默认模式不能删除。是否可以修改?