注册
达梦数据库用户
专栏/培训园地/ 文章详情 /

达梦数据库用户

三少爷 2024/08/22 793 0 0
摘要

DM 用户

1. 数据字典

select * from dba_users;
select * from SYSOBJECTS where subtype$ = 'USER';

2. 预定义用户

select username, user_id, account_status status, default_tablespace dftbs, default_index_tablespace dftbs_idx, temporary_tablespace tmptbs, profile 
  from dba_users 
 order by created, user_id ;

USERNAME   USER_ID     STATUS DFTBS  DFTBS_IDX TMPTBS PROFILE            
---------- ----------- ------ ------ --------- ------ -------------------
SYS        50331648    OPEN   SYSTEM SYSTEM    TEMP   /dm/DMDB/SYSTEM.DBF   内置用户,不允许登录
SYSDBA     50331649    OPEN   MAIN   SYSTEM    TEMP   /dm/DMDB/MAIN.DBF     系统管理员,几乎拥有所有权限(除审计和强制访问控制外)
SYSAUDITOR 50331650    OPEN   SYSTEM SYSTEM    TEMP   /dm/DMDB/SYSTEM.DBF   系统审计管理员,具有审计相关权限
SYSSSO     50331651    OPEN   SYSTEM SYSTEM    TEMP   /dm/DMDB/SYSTEM.DBF   系统安全管理员,具有强制访问控制等权限
SYSDBO                                                                      安全版本中的用户,安全操作员

3. 查看当前连接的用户

select user();
select sys_context('userenv', 'current_schema');

4. 用户密码策略

4.1. 系统支持的<a id="t1">密码策略</a>

<口令策略> 可以为以下值,或其任何组合:

  • 0 无限制。但总长度不得超过 48 个字节;

  • 1 禁止与用户名相同;

  • 2 口令长度需大于等于 INI 参数 <mark>PWD_MIN_LEN</mark> 设置的值;

  • 4 至少包含一个大写字母(A-Z);

  • 8 至少包含一个数字(0-9);

  • 16 至少包含一个标点符号(英文输入法状态下,除“ 和空格外的所有符号)。

📌 若为其他数字,则表示以上设置值的和,如 3=1+2,表示同时启用第 1 项和第 2 项策略。
📌 若不指定 PASSWORD_POLICY < 口令策略 >,则默认采用 INI 参数 PWD_POLICY 所设值;

<font face="隶书" size=5 color=blue>带有特殊字符的密码: </font>

密码带有特殊字符需要双引号引用,在 linux 系统下可以使用单引号 ' 或 \ 转义

例:
disql userName/'"Dameng@123"'
disql userName/"Dameng@123"
disql userName/"Dameng123@#'" ( 密码是 Dameng123@#' )

4.2. 密码策略的参数

<mark>PWD_POLICY</mark> (隐含参数,不在 dm.ini 中),默认为 2 ;

参数默认值:

select * from v$parameter where name in ('PWD_POLICY', 'PWD_MIN_LEN') ;

ID          NAME        TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION                                                                 DEFAULT_VALUE ISDEFAULT  
----------- ----------- ---- ----- --------- ---------- --------------------------------------------------------------------------- ------------- -----------
463         PWD_POLICY  SYS  2     2         2          Flag of password policy                                                     2             1
464         PWD_MIN_LEN SYS  9     9         9          Password min length in byte, it's valid only if PWD_POLICY&2 not equal to 0 9             1

4.3. 为用户指定密码策略

每个用户可以设置单独的策略:

  1. 创建用户时指定策略( 默认为 2 )
  2. 创建后可修改用户的策略

🔔 若在创建用户时没有使用 PASSWORD_POLICY < 口令策略 > 子句指定用户的口令策略,则使用系统的默认口令策略。

4.4. 查看用户的密码策略

查看用户的策略<mark>sysusers(sysuser$)</mark>

select a.username, b.pwd_policy from dba_users a left join sysusers b on a.user_id = b.id order by a.created, a.username;

USERNAME   PWD_POLICY 
---------- -----------
SYS        0
SYSAUDITOR 0
SYSDBA     0
SYSSSO     0
ZHL        0
U1         0
U2         2

5. 用户限制

5.1. 限制方法

  • 创建或修改用户时限制
    📌 已为用户设置的资源限制,可查看 <mark>sysusers</mark> 视图
    使用方法见 "创建和更改用户"

  • 为用户关联 profile
    📌 在 profile 中设置的限制,查看 <mark>dba_profiles</mark> 视图
    <font color=blue>关联 profile 文件后的用户,资源设置项由关联的 profile 文件统一管理配置,无法通过使用 LIMIT < 资源设置 > 直接设置资源设置项。</font>

<font color=red>IP规则和时间规则不能在 profile 设置?</font>

5.2. 限制内容

https://eco.dameng.com/document/dm/zh-cn/pm/resource-limit.html

5.2.1. 用户<a id="t2">资源设置项</a>

1. SESSION_PER_USER

在一个实例中,一个用户可以同时拥有的会话数量

最小值: 1
最大值: 32768
缺省值: 安全版本中默认值为 4096;其他版本中默认值为系统所能提供的最大值

2. CONNECT_TIME

一个会话连接、访问和操作数据库服务器的时间上限(单位:1 分钟。若配置了 ini 参数 <mark>RESOURCE_FLAG</mark>=1,则单位为 1 秒钟)

最小值: 1
最大值: 1440 分或 86400 秒(1 天)
缺省值: 无限制

3. CONNECT_IDLE_TIME

会话最大空闲时间(单位:1 分钟。若配置了 ini 参数 RESOURCE_FLAG=1,则单位为 1 秒钟)

最小值: 1
最大值: 1440 分或 86400 秒(1 天)
缺省值: 无限制

4. FAILED_LOGIN_ATTEMPS

将引起一个账户被锁定的连续注册(登录)失败的次数

最小值: 1
最大值: 100
缺省值: 3,系统预设管理员用户默认无限制

5. CPU_PER_SESSION

一个会话允许使用的 CPU 时间上限(单位:秒)

最小值: 1
最大值: 31536000(365 天)
缺省值: 无限制

6. CPU_PER_CALL

用户的一个请求能够使用的 CPU 时间上限(单位:秒)

最小值: 1
最大值: 86400(1 天)
缺省值: 无限制

7. READ_PER_SESSION

会话能够读取的总数据页数上限

最小值: 1
最大值: 2147483646
缺省值: 无限制

8. READ_PER_CALL

每个请求能够读取的数据页数

最小值: 1
最大值: 2147483646
缺省值: 无限制

9. MEM_SPACE

会话占有的私有内存空间上限(单位:MB)

最小值: 1
最大值: 2147483647
缺省值: 无限制

10. PASSWORD_LIFE_TIME

一个口令在其终止前可以使用的天数

最小值: 1
最大值: 365
缺省值: 无限制

📌 <font color=blue>当 PASSWORD_GRACE_TIME 为 UNLIMITED 时不能设置 PASSWORD_LIFE_TIME </font>

11. PASSWORD_REUSE_TIME

一个口令在可以重新使用前必须经过的天数

最小值: 1
最大值: 365
缺省值: 无限制

12. PASSWORD_REUSE_MAX

一个口令在可以重新使用前必须改变的次数

最小值: 1
最大值: 32768
缺省值: 无限制

13. PASSWORD_LOCK_TIME

如果超过 FAILED_LOGIN_ATTEMPS 设置值,一个账户将被锁定的分钟数

最小值: 1
最大值: 1440(1 天)
缺省值: 1,系统预设管理员用户默认无限制

14. PASSWORD_GRACE_TIME

以天为单位的口令过期宽限时间,过期口令超过该期限后,禁止执行除修改口令以外的其他操作

最小值: 1
最大值: 30
缺省值: 10,系统预设管理员用户默认无限制

5.2.2. <a id="t3">IP规则<a>

IP 地址限制项:

  • NOT_ALLOW_IP(不允许的 IP 地址)
  • ALLOW_IP(允许的 IP 地址)

允许 IP 和禁止 IP 用于控制此登录是否可以从某个 IP 访问数据库,其中<mark>禁止IP优先</mark>。

在设置 IP 时,设置的允许和禁止 IP 需要用双引号括起来,中间用逗号隔开,如 "192.168.0.29", "192.168.0.30" ,也可以利用 * 来设置网段,如 "192.168.0.*" :

ALLOW_IP "192.168.0.*"
ALLOW_IP "192.168.0.29", "192.168.0.30"
IP限制项 集合 1 集合 2 集合 3 集合 4
NOT_ALLOW_IP N N
ALLOW_IP Y Y
IP 限制结果 只允许属于集合Y的IP地址 只允许属于集合N以外的所有IP地址 允许所有IP,即无任何IP地址限制 只允许属于Y-N (差集)集合的IP地址

5.2.3. <a id="t4">时间规则<a>

用户时间段设置:

  • NOT_ALLOW_DATETIME (不允许的时间段)
  • ALLOW_DATETIME (允许的时间段)

允许时间段和禁止时间段用于控制此登录是否可以在某个时间段访问数据库,其中<mark>禁止时间段优先</mark>。

设置的时间段中的日期和时间要分别用双引号括起来。在设置时间段时,有两种方式:

  • 具体时间段

    ALLOW_DATETIME "2016-1-1" "8:30:30" to "2016-12-12" "17:30:00"
    
  • 规则时间段

    ALLOW_DATETIME MON "8:30:00" to FRI "17:30:00" 
    
时间段限制项 集合 1 集合 2 集合 3 集合 4
NOT_ALLOW_DATETIME N N
ALLOW_DATETIME Y Y
时间段限制结果 只允许属于集合Y的时间段 只允许属于集合N以外的所有时间段 允许所有时间段,即无任何时间段限制 只允许属于Y-N (差集)集合的时间段

5.3. 关联 profile

DM 支持使用 profile 管理用户资源限制(2021 年 10 月以后的版本支持)

5.3.1. 数据字典

select * from dba_profiles ;

PROFILE RESOURCE_NAME        RESOURCE_TYPE LIMIT    
------- -------------------- ------------- ---------
DEFAULT CPU_PER_CALL         KERNEL        UNLIMITED
DEFAULT CPU_PER_SESSION      KERNEL        UNLIMITED
DEFAULT MEM_SPACE            KERNEL        UNLIMITED
DEFAULT READ_PER_CALL        KERNEL        UNLIMITED
DEFAULT READ_PER_SESSION     KERNEL        UNLIMITED
DEFAULT CONNECT_TIME         KERNEL        UNLIMITED
DEFAULT SESSION_PER_USER     KERNEL        UNLIMITED
DEFAULT CONNECT_IDLE_TIME    KERNEL        UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPS PASSWORD      3
DEFAULT PASSWORD_LIFE_TIME   PASSWORD      UNLIMITED
DEFAULT PASSWORD_REUSE_TIME  PASSWORD      UNLIMITED
DEFAULT PASSWORD_REUSE_MAX   PASSWORD      UNLIMITED
DEFAULT PASSWORD_LOCK_TIME   PASSWORD      1
DEFAULT PASSWORD_GRACE_TIME  PASSWORD      10

14 rows got

5.3.2. 创建和修改 profile

创建 profile

create profile profileName limit FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3, PASSWORD_LIFE_TIME 180 ;

修改 profile 中的资源限制

alter profile pf1 limit FAILED_LOGIN_ATTEMPS 5;

5.3.3. 为用户关联 profile

为用户关联 profile

alter user userName profile profieName ;

删除用户关联的 profile

alter user userName drop profile;  

5.3.4. 查看用户关联的 profile

select a.user_id, a.username, b.pid profile_id, c.name profile_name
  from dba_users a, sysuserprofiles b, sysobjects c
 where a.user_id = b.uid
   and b.pid = c.id
;

USER_ID     USERNAME PROFILE_ID  PROFILE_NAME
----------- -------- ----------- ------------
50331771    U1       469762152   PF1

6. 创建和更改用户

https://eco.dameng.com/document/dm/zh-cn/pm/identification-authentication.html

https://eco.dameng.com/document/dm/zh-cn/pm/definition-statement#3.2.1%20%E7%94%A8%E6%88%B7%E5%AE%9A%E4%B9%89%E8%AF%AD%E5%8F%A5

6.1. 语法

<details><summary><font color=blue>create user</font></summary>
<pre><code>CREATE USER [IF NOT EXISTS] <用户名> IDENTIFIED <身份验证模式> [PASSWORD_POLICY <口令策略>][<锁定子句>][<存储加密密钥>][<只读标志>][<资源限制子句>][<密码过期子句>][<允许IP子句>][<禁止IP子句>][<允许时间子句>][<禁止时间子句>][<TABLESPACE子句>][<INDEX_TABLESPACE子句>][<表空间配额子句>];
<身份验证模式> ::=
<数据库身份验证模式>|
<外部身份验证模式>
<数据库身份验证模式> ::= BY <口令> [<散列选项>]
<散列选项> ::= HASH WITH [<密码引擎名>.]<散列算法> [<加盐选项>]
<加盐选项> ::= [NO] SALT
<外部身份验证模式> ::=
EXTERNALLY |
EXTERNALLY AS <用户DN>
<口令策略> ::= 口令策略项的任意组合
<锁定子句> ::=
ACCOUNT LOCK |
ACCOUNT UNLOCK
<存储加密密钥> ::= ENCRYPT BY <口令>
<只读标志> ::= [NOT] READ ONLY
<资源限制子句> ::=
DROP PROFILE |
PROFILE <profile名> |
LIMIT <资源设置>
<资源设置> ::=
<资源设置项>{,<资源设置项>} |
<资源设置项>{ <资源设置项>}
<资源设置项> ::=
SESSION_PER_USER <参数设置> |
CONNECT_IDLE_TIME <参数设置> |
CONNECT_TIME <参数设置> |
CPU_PER_CALL <参数设置> |
CPU_PER_SESSION <参数设置> |
MEM_SPACE <参数设置> |
READ_PER_CALL <参数设置> |
READ_PER_SESSION <参数设置> |
FAILED_LOGIN_ATTEMPTS <参数设置> |
PASSWORD_LIFE_TIME <参数设置> |
PASSWORD_REUSE_TIME <参数设置> |
PASSWORD_REUSE_MAX <参数设置> |
PASSWORD_LOCK_TIME <参数设置> |
PASSWORD_GRACE_TIME <参数设置>
<参数设置> ::=
<参数值>|
UNLIMITED|
DEFAULT
<密码过期子句> ::= PASSWORD EXPIRE
<允许IP子句> ::=
ALLOW_IP NULL |
ALLOW_IP <IP项>{,<IP项>}
<禁止IP子句> ::=
NOT_ALLOW_IP NULL |
NOT_ALLOW_IP <IP项>{,<IP项>}
<IP项> ::=
<具体IP>|
<网段>
<允许时间子句> ::= ALLOW_DATETIME <时间项>{,<时间项>}
<禁止时间子句> ::= NOT_ALLOW_DATETIME <时间项>{,<时间项>}
<时间项> ::=
<具体时间段> |
<规则时间段>
<具体时间段> ::= <具体日期> <具体时间> TO <具体日期> <具体时间>
<规则时间段> ::= <规则时间标志> <具体时间> TO <规则时间标志> <具体时间>
<规则时间标志> ::=
MON |
TUE |
WED |
THURS |
FRI |
SAT |
SUN
<TABLESPACE子句> ::= DEFAULT TABLESPACE <表空间名>
<INDEX_TABLESPACE子句> ::= DEFAULT INDEX TABLESPACE <表空间名>
<表空间配额子句> ::=
QUOTA UNLIMITED |
QUOTA 0 |
QUOTA <配额大小> ON <表空间名>{ QUOTA <配额大小> ON <表空间名>}
<配额大小> ::=
UNLIMITED |
<空间大小>[K|M|G|T] </code></pre>
</details>

<details><summary><font color=blue>alter user</font></summary>
<pre><code>ALTER USER <用户名> [<修改用户子句>] | [<用户代理功能子句>];
<修改用户子句> ::= [IDENTIFIED <身份验证模式>] [PASSWORD_POLICY <口令策略>] [<锁定子句>] [<存储加密密钥>] [<只读标志>][<资源限制子句>][<密码过期子句>] [<允许IP子句>][<禁止IP子句>][<允许时间子句>][<禁止时间子句>][<TABLESPACE子句>][<INDEX_TABLESPACE子句>][<SCHEMA子句>][<表空间配额子句>]
<身份验证模式> ::= <数据库身份验证模式>|<外部身份验证模式>
<数据库身份验证模式> ::= 参考3.2.1 用户定义语句中的<数据库身份验证模式>
<外部身份验证模式> ::= 参考3.2.1 用户定义语句中的<外部身份验证模式>
<口令策略> ::= 口令策略项的任意组合
<锁定子句> ::= ACCOUNT <LOCK | UNLOCK>
<存储加密密钥> ::= ENCRYPT BY <口令>
<只读标志> ::= [NOT] READ ONLY
<资源限制子句> ::= 参考3.2.1 用户定义语句中的<资源限制子句>
<密码过期子句> ::= PASSWORD EXPIRE
<允许IP子句> ::=
ALLOW_IP NULL |
ALLOW_IP <IP项>{,<IP项>}
<禁止IP子句> ::=
NOT_ALLOW_IP NULL |
NOT_ALLOW_IP <IP项>{,<IP项>}
<IP项> ::= <具体IP>|<网段>
<允许时间子句> ::= ALLOW_DATETIME <时间项>{,<时间项>}
<禁止时间子句> ::= NOT_ALLOW_DATETIME <时间项>{,<时间项>}
<时间项> ::= 参考3.2.1 用户定义语句中的<时间项>
<TABLESPACE子句> ::=DEFAULT TABLESPACE <表空间名>
<INDEX_TABLESPACE子句> ::= DEFAULT INDEX TABLESPACE <表空间名>
<SCHEMA子句> ::= ON SCHEMA <模式名>
<表空间配额子句> ::= 参考3.2.1 用户定义语句中的<表空间配额子句>
<用户代理功能子句> ::= <GRANT | REVOKE> CONNECT THROUGH <代理用户名></code></pre>
</details>

  • create 语法参数
  1. <用户名> 指明要创建的用户名称,用户名称最大长度 128 字节;

  2. <参数设置> 用于限制用户对 DM 数据库服务器系统资源的使用;

  3. 系统在创建用户时,必须指定一种身份验证模式:
    < 数据库身份验证模式 > 或者 < 外部身份验证模式 >。

    < 数据库身份验证模式 > 中如果缺省了 < 散列选项 >,则采用 HASH WITH SHA512 NO SALT。系统用户(SYSDBA、SYSAUDITOR、SYSSSO、SYSDBO)均采用 HASH WITH SHA512 NO SALT 方式。如果 MANAGER 登录时勾选了“保存口令(S)”,这个口令保存在客户端则采用 HASH WITH AES256 NO SALT 方式。< 加盐选项 > 缺省为 NO SALT。

    < 外部身份验证模式 > 支持基于操作系统(OS)的身份验证、LDAP 身份验证和 KERBEROS 身份验证,具体请参考《DM8 安全管理》2.3 节。

  4. <口令策略>, 见 <a href="#t1">系统支持的密码策略</a>

    <存储加密密钥 > 用于与半透明加密配合使用,缺省情况下系统自动生成一个密钥,半透明加密时用户仅能查看到自己插入的数据;

  5. < 只读标志 > 表示该登录是否只能对数据库进行只读操作,默认为可读写;

  6. < 资源设置项 > 见 <a href="#t2">用户限制 - 限制内容 - 用户资源设置项</a>

  7. < 密码过期子句 > 用于设置密码过期。密码过期可使用 ALTER USER 语句进行重设。< 密码过期子句 > 也可以和 PASSWORD_LIFE_TIME 搭配使用;

  8. 允许 IP 和禁止 IP 用于控制此登录是否可以从某个 IP 访问数据库,其中禁止 IP 优先。在设置 IP 时,可以利用来设置网段,如 192.168.0.。设置的允许和禁止 IP 需要用双引号括起来。见 <a href="#t3">用户限制 - 限制内容 - IP规则</a>

  9. 允许时间段和禁止时间段用于控制此登录是否可以在某个时间段访问数据库,其中禁止时间段优先。设置的时间段中的日期和时间要分别用双引号括起来。 见 <a href="#t4">用户限制 - 限制内容 - 时间规则</a>

  10. 外部身份验证功能只在安全版本中提供;

  11. 默认用户表空间 <TABLESPACE 子句 > 和默认索引表空间 <INDEX_TABLESPACE 子句 > 不能使用 SYSTEM、RLOG、ROLL、TEMP 表空间;

  12. < 表空间配额子句 > 用于设置用户对表空间的使用空间大小限制。QUOTA UNLIMITED 表示用户对所有表空间均无配额限制,缺省为 QUOTA UNLIMITED。QUOTA 0 表示用户对所有表空间的配额均为 0。允许指定 < 表空间名 > 来设置用户对特定表空间的配额大小,配额上限为 100T,< 空间大小 > 的默认单位为字节。

  • create user 使用说明
  1. 用户名在服务器中必须唯一。如果用户名已存在则报错,若指定 IF NOT EXISTS 关键字,用户名已存在不报错,忽略本次用户创建操作;

  2. 系统为一个用户存储的信息主要有:用户名、口令、资源限制;

  3. 用户口令以密文形式存储;

  4. 如果没有指定用户默认表空间,则系统指定 MAIN 表空间为用户的默认表空间;

  5. 如果没有指定用户默认索引表空间,则 HUGE 表的索引缺省存储在用户的默认表空间中,普通表的索引缺省存储在表的聚集索引所在的表空间中。临时表的索引永远在 TEMP 表空间;

  6. 系统预先设置了三个用户,分别为 SYSDBA、SYSAUDITOR 和 SYSSSO,其中 SYSDBA 具备 DBA 角色,SYSAUDITOR 具备 DB_AUDIT_ADMIN 角色,而 SYSSSO 具备 DB_POLICY_ADMIN 系统角色;

  7. DM 提供数据库身份验证模式和外部身份验证模式来保护对数据库访问的安全。数据库身份验证模式需要利用数据库口令;外部身份验证模式支持基于操作系统(OS)的身份验证、LDAP 身份验证和 KERBEROS 身份验证,关于外部身份验证模式的使用具体请参考《DM8 安全管理》;

  8. < 资源限制子句 > 使用 DROP PROFILE 删除关联的 profile 文件;使用 PROFILE <profile 名 > 指定关联的 profile 文件;使用 LIMIT < 资源设置 > 直接设置资源设置项。
    <font color=blue>关联 profile 文件后的用户,资源设置项由关联的 profile 文件统一管理配置,无法再通过使用 LIMIT < 资源设置 > 直接设置资源设置项。直到通过修改用户指定 DROP PROFILE 解除关联或关联的 PROFILE 被级联删除之后,才可以使用 LIMIT < 资源设置 > 设置</font> ;

  9. < 表空间配额子句 > 不支持对系统表空间、临时表空间、回滚表空间设置配额。

  • alter 语法参数

用户代理功能子句用于赋予用户 B 能够以代理的身份认证登录用户 A 的权限,即 CONNECT THROUGH 权限。其中,用户 B 表示参数 < 代理用户名 > 指定的用户,用户 A 表示参数 < 用户名 > 指定的用户。关键字 GRANT 表示赋予权限,关键字 REVOKE 表示收回权限。

  • alter user 使用说明
  1. 每个用户均可修改自身的口令,SYSDBA 用户可强制修改所有其他用户的口令(在数据库验证方式下);

  2. 只有具备 ALTER USER 权限的用户才能修改其身份验证模式、系统角色及资源限制项;

  3. 不论 DM.INI 的 DDL_AUTO_COMMIT 设置为自动提交还是非自动提交,ALTER USER 操作都会被自动提交;

  4. 修改用户口令时,口令策略应符合创建该用户时指定的口令策略;

  5. 不能修改系统固定用户的系统角色;

  6. 不能修改系统固定用户为只读;

  7. <SCHEMA 子句>用于设置用户的缺省模式;

  8. 针对用户 B 以代理的身份认证登录用户 A 的权限,即 CONNECT THROUGH 权限,需注意:

    1) 只有拥有 DBA 角色权限的用户(DBA/DB_POLICY_ADMIN/DB__AUDIT_ADMIN/DB_OBJECT_ADMIN)才能赋予用户 B 该权限;
    2) 只有赋予用户 B 以 CONNECT THROUGH 权限后,用户 B 才能以代理的身份认证登录用户 A;
    3) 用户 A、B 可以为 SYSDBA 用户,且用户 A、B 可以为同一用户;
    4) 如果用户 A 或用户 B 不存在,则报错;
    5) 用户 A、B 类型(普通/安全/审计/OBJECT)必须相同,否则报错;
    6) 系统表 SYSGRANTS 中查不到 CONNECT THROUGH 权限;
    7) 无法对三权分立和四权分立的角色设置 CONNECT THROUGH 权限;
    8) CONNECT THROUGH 权限无法和用户其他属性(如口令策略)同时设置。

  9. < 资源限制子句 > 使用 DROP PROFILE 删除关联的 profile 文件;使用 PROFILE <profile 名 > 指定关联的 profile 文件;使用 LIMIT < 资源设置 > 直接设置资源设置项,此处只需要设置要修改的设置项即可,其他设置项值保持不变;

  10. < 密码过期子句 > 用于设置密码过期;

  11. < 表空间配额子句 > 新修改的配额限制不会影响用户已经使用的表空间;若用户拥有 UNLIMITED TABLESPACE 权限,则对该用户指定 < 表空间配额子句 > 无效,该用户始终对所有表空间均无配额限制;

  12. 其他参数的取值、意义与 CREATE USER 中的要求一样。

6.2. 创建用户

创建一个用户:

  • 密码策略 0
  • 不锁定
  • 非只读
  • 关联 profile
  • 设置 allow ip
  • 设置 allow datetime
  • 指定默认表空间
  • 指定默认索引表空间
  • <font color=red>以下语句加上 QUOTA UNLIMITED 报错,原因不清楚 </font>
create user userName identified by passWord password_policy 0 account unlock not read only profile pf1 allow_ip "192.168.0.1", "192.168.0.231" allow_datetime "2023-09-09" "00:00:00" to "2023-09-30" "18:00:00" default tablespace tbs_dat default index tablespace tbs_idx ;

其它示例:

创建用户时限制(limit、allow_ip、allow_datetime)

create user userName identified by passWord limit FAILED_LOGIN_ATTEMPS 5, password_lock_time 5 allow_ip "192.168.0.*" allow_datetime "2023-09-01" "00:00:00" to "2023-10-01" "18:00:00" ;
create user userName identified by passWord limit FAILED_LOGIN_ATTEMPS 5, password_lock_time 5 allow_ip "192.168.0.1", "192.168.0.231" allow_datetime "2023-1-1" "8:30:30" to "2023-12-12" "17:30:00" ;

创建一个密码为过期状态的用户(需要修改密码后才能使用)

create user userName identified by passWord password expire;

创建基于操作系统身份验证的用户

create user userName identified externally;

6.3. 更改用户

更改用户限制(limit、allow_ip、allow_datetime)

alter user userName limit FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 5 allow_ip "192.168.0.1", "192.168.0.231" allow_datetime "2023-1-1" "8:30:30" to "2023-12-12" "17:30:00" ;

修改用户会话空闲期为无限制,最大连接数为 10。

alter user userName limit session_per_user 10, connect_idle_time unlimited;

赋予用户 user2 代理权限,使用户 user2 可以认证登录用户 user1。

alter user user1 grant connect through user2;

6.4. 查看用户的资源限制

select a.user_id
     , a.username
     , b.pwd_policy
     , b.sess_per_user
     , b.conn_idle_time
     , b.failed_attemps
     , b.failed_num
     , b.life_time
     , b.reuse_time
     , b.reuse_max
     , b.lock_time
     , b.grace_time
     , b.rn_flag
     , b.allow_addr
     , b.not_allow_addr
     , b.allow_dt
     , b.not_allow_dt
  from dba_users a, sysusers b 
 where a.user_id = b.id
   and a.username not like 'SYS%'
;

7. 锁定用户

查看用户状态

select username, account_status from dba_users ;

锁定用户

alter user userName account lock;

解锁用户

alter user userName account unlock;

用户密码错误超过3次,自动锁定用户:

[dmdba@dmdb ~]$ disql u1/123
[-2501]:Invalid username or password.
disql V8
username:^C
[dmdba@dmdb ~]$ disql u1/123
[-2501]:Invalid username or password.
disql V8
username:^C
[dmdba@dmdb ~]$ disql u1/123
[-2501]:Invalid username or password.
disql V8
username:^C
[dmdba@dmdb ~]$ disql u1/123
[-2508]:Too many login fail times.        <<<
SQL> select username, account_status from dba_users where username = 'U1';

USERNAME ACCOUNT_STATUS
-------- --------------
U1       LOCKED

8. 删除用户

删除用户的操作一般由 SYSDBA、SYSSSO、SYSAUDITOR 完成,他们可以删除同类型的其他用户。普通用户要删除其他用户,需要具有 DROP USER 权限。

如果在删除用户时使用了 CASCADE 选项,除数据库中该用户及其创建的所有对象被删除外,若其他用户创建的对象引用了该用户的对象,DM 还将自动删除相应的引用完整性约束及依赖关系。

drop user [ IF EXISTS ] userName [ RESTRICT | CASCADE ] ;

9. 用户身份验证模式

  1. 基于操作系统的身份验证(本机验证(ENABLE_LOCAL_OSAUTH=1, 缺省值为 0)和远程验证(ENABLE_REMOTE_OSAUTH=1 缺省值为 0),同时还要将 ENABLE_ENCRYPT=1 ,表示采用 SSL 安全连接。
  2. Dmdba|dmsso|dmauditor 用户组分别结应数据库的 sysdba|syssso|sysauditor.
  3. LDAP 身份验证, dm.ini ( LDAP_HOST )
  4. KERBEROS 身份验证
  5. <font color=red>UKEY 身份验证 ( CLINET_UKEY=1/0 )</font>

10. Problem

10.1. 修改用户密码 [-2504]: Password length invalid

测试, 改为无策略后修改密码

当前密码策略参数为默认值,创建一个用户 u1

SQL> create user u1 identified by 123456789;
executed successfully

将 PWD_POLICY 的值改为 0 ,无策略 :

SQL> alter system set 'PWD_POLICY' = 0 both;
DMSQL executed successfully

SQL> select name, type, value, sys_value, file_value, default_value, isdefault from v$parameter where name in ('PWD_POLICY', 'PWD_MIN_LEN');

NAME        TYPE VALUE SYS_VALUE FILE_VALUE DEFAULT_VALUE ISDEFAULT  
----------- ---- ----- --------- ---------- ------------- -----------
PWD_POLICY  SYS  0     0         0          2             0
PWD_MIN_LEN SYS  9     9         9          9             1

修改密码报错:密码长度不符合要求

SQL> alter user u1 identified by u1;
<font color=red>alter user u1 identified by u1;
[-2504]:Error in line: 1
Password length invalid.
</font>

此时,在无策略的情况下,再创建一个用户 u2,使用简单密码,可以创建成功:

SQL> create user u2 identified by 123;
executed successfully

再修改一个简单密码,也可以成功:

SQL> alter user u2 identified by u2;
executed successfully

继续测试,将 PWD_POLICY 的值改回 2,然后修改密码。

SQL> alter system set 'PWD_POLICY' = 2 both;
DMSQL executed successfully

SQL> select name, type, value, sys_value, file_value, default_value, isdefault from v$parameter where name in ('PWD_POLICY', 'PWD_MIN_LEN');

NAME        TYPE VALUE SYS_VALUE FILE_VALUE DEFAULT_VALUE ISDEFAULT  
----------- ---- ----- --------- ---------- ------------- -----------
PWD_POLICY  SYS  2     2         2          2             1
PWD_MIN_LEN SYS  9     9         9          9             1

现在策略为 2, 最小密码长度为 9 。

修改用户 u2 的密码为简密码,修改成功:

SQL> alter user u2 identified by dm123;
executed successfully

测试结果

用户密码策略的限制,不是根据当前设置的策略执行,而是根据创建用户时设置的策略执行。

以上测试中
创建用户 u1 时策略为 2,后续修改策略为 0,无限制,但密码仍不能小于9位;
创建用户 u2 时策略为 0,无限制,后续修改策略为 2,仍可修改为小于9位的简单密码。

<font color=red>如何设置为所有用户受当前策略影响? </font>

补充 >>>

每个用户可以设置单独的密码策略。可以在创建用户时指定策略,或在需要时更改用户策略。

创建用户 u2 时,指定策略 2

SQL> create user u2 identified by 123456789 PASSWORD_POLICY 2;
executed successfully

修改用户的密码策略为 0,然后修改为小于 9 位的密码,修改成功

SQL> alter user u2 PASSWORD_POLICY 0;
executed successfully

SQL> alter user u2 identified by u2;
executed successfully
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服