用户标识与鉴别对试图登录数据库进行数据访问的用户进行身份验证,以确认此用户是否能与某一数据库用户进行关联,并根据关联的数据库用户的权限对此用户在数据库中的数据访问活动进行安全控制。
2.1 DM 的管理用户
在现实生活中,任何一个系统如果将所有的权利都赋予给某一个人,而不加以监督和控制,势必会产生权利滥用的风险。从数据库安全角度出发,一个大型的数据库系统有必要将数据库系统的权限分配给不同的角色来管理,并且各自偏重于不同的工作职责,使之能够互相限制和监督,从而有效保证系统的整体安全。
DM 数据库采用三权分立或四权分立的安全机制,将系统中所有的权限按照类型进行划分,为每个管理员分配相应的权限,管理员之间的权限相互制约又相互协助,从而使整个系统具有较高的安全性和较强的灵活性。
可在创建 DM 数据库时通过建库参数 PRIV_FLAG 设置使用三权分立或四权分立。0 表示三权分立,1 表示四权分立。此参数仅在 DM 安全版本下提供,即仅 DM 安全版本提供四权分立,缺省采用三权分立。
2.1.1 三权分立的管理用户
使用三权分立安全机制时,管理用户分为数据库管理员、数据库安全员和数据库审计员三种类型。
在安装过程中,DM 数据库会预设数据库管理员账号 SYSDBA、数据库安全员账号 SYSSSO、数据库审计员账号 SYSAUDITOR。用户需要基于 DM 默认口令策略自行设置各个管理用户的口令,关于 DM 默认口令策略的介绍请参考 2.2.2 口令策略。
此外,需要说明的是,在 DM 数据库中有一个特殊的预定义用户“SYS”,此用户仅用于保存系统内部对象,并非数据库管理员,也无法进行登录。
2.1.1.1 数据库管理员 DBA
每个数据库至少需要一个 SYSDBA 来管理,SYSDBA 可能是一个团队,也可能是一个人。在不同的数据库系统中,数据库管理员的职责可能也会有比较大的区别,总体而言,数据库管理员的职责主要包括以下任务:
- 评估数据库服务器所需的软、硬件运行环境
- 安装和升级 DM 服务器
- 数据库结构设计
- 监控和优化数据库的性能
- 计划和实施备份与故障恢复
2.1.1.2 数据库安全员 SSO
有些应用对于安全性有着很高的要求,传统的由 SYSDBA 一人拥有所有权限并且承担所有职责的安全机制可能无法满足企业实际需要,此时数据库安全员和数据库审计员两类管理用户就显得异常重要,它们对于限制和监控数据库管理员的所有行为都起着至关重要的作用。
数据库安全员的主要职责是制定并应用安全策略,强化系统安全机制。数据库安全员 SYSSSO 是 DM 数据库初始化的时候就已经创建好的,可以以该用户登录到 DM 数据库来创建新的数据库安全员。
SYSSSO 或者新的数据库安全员都可以制定自己的安全策略,在安全策略中定义安全级别、范围和组,然后基于定义的安全级别、范围和组来创建安全标记,并将安全标记分别应用到主体(用户)和客体(各种数据库对象,如表、索引等),以便启用强制访问控制功能。
数据库安全员不能对用户数据进行增、删、改、查,也不能执行普通的 DDL 操作如创建表、视图等。他们只负责制定安全机制,将合适的安全标记应用到主体和客体,通过这种方式可以有效的对 SYSDBA 的权限进行限制,SYSDBA 此后就不能直接访问添加有安全标记的数据,除非安全员给 SYSDBA 也设定了与之匹配的安全标记,SYSDBA 的权限受到了有效的约束。数据库安全员也可以创建和删除新的安全用户,向这些用户授予和回收安全相关的权限,具体参见 3.3 权限的分配与回收。
2.1.1.3 数据库审计员 AUDITOR
我们可以想象一下,某个企业内部 SYSDBA 非常熟悉公司内部 ERP 系统的数据库设计,该系统包括了员工工资表,里面记录了所有员工的工资,公司的出纳通过查询系统内部员工工资表来发放工资。传统的 SYSDBA 集所有权利于一身,可以很容易修改工资表,从而导致公司工资账务错乱。为了预防该问题,可以采用前面数据库安全员制定安全策略的方法,避免 SYSDBA 或者其他数据库用户具有访问该表的权限。为了能够及时找到 SYSDBA 或者其他用户的非法操作,在 DM 数据库中还可以在系统建设初期,由数据库审计员(SYSAUDITOR 或者其他由 SYSAUDITOR 创建的审计员)来设置审计策略(包括审计对象和操作),在需要时,数据库审计员可以查看审计记录,及时分析并查找出幕后真凶。
从上面的介绍中我们也可以看出,在 DM 数据库中,审计员的主要职责就是创建和删除数据库审计员,设置/取消对数据库对象和操作的审计设置,查看和分析审计记录等。
2.1.2 四权分立的管理用户
使用四权分立安全机制时,管理用户分为数据库管理员、数据库安全员、数据库审计员和数据库对象操作员四种类型。
在安装过程中,DM 数据库会预设数据库管理员账号 SYSDBA、数据库安全员账号 SYSSSO、数据库审计员账号 SYSAUDITOR,数据库对象操作员 SYSDBO。用户需要基于 DM 默认口令策略自行设置各个管理用户的口令,关于 DM 默认口令策略的介绍请参考 2.2.2 口令策略。
此外,需要说明的是,在 DM 数据库中有一个特殊的预定义用户“SYS”,此用户仅用于保存系统内部对象,并非数据库管理员,也无法进行登录。
2.1.2.1 数据库管理员 DBA
三权分立时数据库管理员既可进行系统管理和维护工作,也可对数据内容进行增删查改操作。四权分立的安全机制在三权分立基础上调整了自主访问控制权限。四权分立时数据库管理员只能进行系统管理和维护工作,不能对数据内容进行增删查改操作。数据库操作员可进行增删改查操作,但不能管理和维护系统。
四权分立数据库管理员只具有三权分立数据库管理员的一部分权限。与三权分立的数据库管理员相比,四权分立的数据库管理员的权限变化如下:
- 取消了权限较大的 ANY 权限。
- 取消了数据库对象的创建、增删查改、对象权限的管理功能。
- 只保留了与管理与维护相关的且明确的数据库权限。例如:数据库创建、备份、还原和校验等。
2.1.2.2 数据库对象操作员 DBO
可以创建数据库对象,并对自己拥有的数据库对象(表、视图、存储过程、序列、包、外部链接等)具有所有的对象权限并可以授出与回收,但其无法管理与维护数据库对象。
2.1.2.3 数据库安全员 SSO
和三权分立的数据库安全员用法一致。
2.1.2.4 数据库审计员 AUDITOR
和三权分立的数据库审计员用法一致。
2.2 如何创建用户
数据库系统在运行的过程中,往往需要根据实际需求创建用户,然后为用户指定适当的权限。创建用户的操作一般只能由系统预设用户 SYSDBA、SYSSSO、SYSAUDITOR 和 SYSDBO 完成,如果普通用户需要创建用户,必须具有 CREATE USER 的数据库权限。
使用 MANAGER 执行 CREATE USER 语句创建的用户会同时具备 SVI(此时 SVI 属于 PUBLIC)和 VTI 角色权限。使用 DIsql 执行 CREATE USER 语句创建的用户只具备 SVI 角色权限。CREATE USER 语句创建的用户无 SOI 权限,如果想让这些用户能够查看系统表,还需要额外授予 SOI 权限。CREATE USER 创建的新用户不具备 SOI 权限。
2.2.1 创建用户
创建用户的命令是 CREATE USER,创建用户所涉及的内容包括为用户指定用户名、认证模式、口令、口令策略、只读属性以及资源限制等。其中用户名是代表用户账号的标识符,长度为 1~128 个字符。用户名可以用双引号括起来,也可以不用,但如果用户名以数字开头,必须用双引号括起来。
在 DM 中使用 CREATE USER 语句创建用户,具体的语法格式如下:
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 <参数设置>|
INACTIVE_ACCOUT_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]
注意外部身份验证仅在DM安全版本中才提供支持。
资源限制子句将在第 9 章进行详细介绍。
例 创建用户名为 BOOKSHOP_USER、口令为 BSpsd_123、会话超时为 3 分钟的用户。
CREATE USER BOOKSHOP_USER IDENTIFIED BY "BSpsd_123" LIMIT CONNECT_TIME 3;
2.2.2 口令策略
创建用户语句中的 PASSWORD_POLICY 子句用来指定该用户的口令策略,口令策略可以设置为 15 或 31,含义如下:
- 15 口令禁止与用户名相同,口令长度需大于等于 INI 参数 PWD_MIN_LEN 设置的值,口令最长为 48 字节,至少包含一个大写字母(A-Z)和一个小写字母(a-z),至少包含一个数字(0-9)
- 31 口令禁止与用户名相同,口令长度需大于等于 INI 参数 PWD_MIN_LEN 设置的值,口令最长为 48 字节,至少包含一个大写字母(A-Z)和一个小写字母(a-z),至少包含一个数字(0-9),至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
除了在创建用户语句中指定该用户的口令策略,DM 的 INI 参数 PWD_POLICY 可以指定系统的默认口令策略,其参数值的设置规则与 PASSWORD_POLICY < 口令策略 > 子句一致,缺省值为 15。若在创建用户时没有使用 PASSWORD_POLICY < 口令策略 > 子句指定用户的口令策略,则使用系统的默认口令策略。
系统管理员可通过查询 V$PARAMETER 动态视图查询 PWD_POLICY 的当前值。
SELECT * FROM V$PARAMETER WHERE NAME= 'PWD_POLICY';
PWD_POLICY 参数是比较特殊,属于不包含在 dm.ini 中的 INI 配置项,因此不能使用 Console 工具进行修改。DBA 用户可以使用系统过程 SP_SET_PARA_VALUE 来配置 PWD_POLICY 参数值,关于 SP_SET_PARA_VALUE 的详细介绍请参考《DM8_SQL 语言使用手册》。
例如,将 PWD_POLICY 置为 31,同时修改文件和内存参数,由于 PWD_POLICY 为动态 INI 参数,这样设置后新的参数值可以立即生效。
SP_SET_PARA_VALUE(1, 'PWD_POLICY',31);
注意DM.INI文件中包含的参数都可以使用Console工具或调用系统过程SP_SET_PARA_VALUE/SP_SET_PARA_DOUBLE_VALUE/ SP_SET_PARA_STRING_VALUE方法来进行设置。
因为Console为脱机工具,对参数值的修改通过修改dm.ini文件中的参数值来进行,无论参数类型是静态还是动态,都需要重启DM服务器才能使新设置的参数值生效。
2.3 用户身份验证模式
DM 提供多种用户身份验证模式来保护对数据库访问的安全,包括数据库身份验证、基于操作系统的身份验证、LDAP 身份验证、SSL 双因子身份验证、KERBEROS 身份验证和 UKEY 身份验证。
本节将对上述身份验证模式进行详细介绍。
2.3.1 数据库身份验证
数据库身份验证需要利用数据库口令进行身份验证,即在创建或修改用户时指定用户口令,用户在登录时输入对应口令进行身份验证。
数据库身份验证是最常用的一种身份验证方式,具体可以参考《DM8_DIsql 使用手册》中有关登录方式的介绍。
2.3.2 基于操作系统的身份验证
基于操作系统的身份验证支持本机验证和远程验证,下面将分别展开介绍。
2.3.2.1 本机验证
本机验证需要将 DM 配置文件 dm.ini 的 ENABLE_LOCAL_OSAUTH 参数设置为 1,表示支持本机验证。该参数为静态参数,数据库管理员可以使用系统过程 SP_SET_PARA_VALUE 进行修改,但修改后需要重新启动 DM 服务器才能生效。
本机验证需要首先将操作系统用户加入到操作系统的 dmdba|dmsso|dmauditor 用户组,分别对应数据库的 SYSDBA|SYSSSO|SYSAUDITOR 用户。也可以将操作系统用户加入到操作系统的 dmusers 用户组,对应数据库的同名用户,即此时数据库中需要存在一个与操作系统用户同名的用户。
举例说明:
例 1 操作系统用户 dameng 以普通用户身份登录数据库。
- 在数据库中创建一个操作系统的同名用户,并修改 INI 参数。
SQL> CREATE USER dameng IDENTIFIED BY "Dameng12345";
SQL> SP_SET_PARA_VALUE(2,'ENABLE_LOCAL_OSAUTH',1);
SQL> COMMIT;
重新启动数据库服务器,使 INI 参数生效。
- 在操作系统中创建 dmusers 用户组,并将操作系统用户 dameng 添加到 dmusers 用户组。
Windows 操作系统下,以管理员身份运行命令提示符工具并执行以下命令:
C:\Windows\system32>net localgroup dmusers /add
C:\Windows\system32>net localgroup dmusers dameng /add
Linux 操作系统下:
[dameng@test163 ~]$ sudo groupadd dmusers
[dameng@test163 ~]$ sudo usermod -G dmusers dameng
- 操作系统用户 dameng 使用本地操作系统身份验证的方式登录数据库。
以 Windows 操作系统为例:
D:\dmdbms\bin>disql.exe /@localhost:5236 as users
例 2 操作系统用户 dameng_dba 以数据库管理员 SYSDBA 身份登录数据库。
- 数据库首先修改 INI 参数。
SQL> SP_SET_PARA_VALUE(2,'ENABLE_LOCAL_OSAUTH',1);
SQL> COMMIT;
重新启动数据库服务器,使 INI 参数生效。
- 在操作系统中创建 dmdba 用户组,并将 dameng_dba 添加到 dmdba 用户组。
Windows 操作系统下,以管理员身份运行命令提示符工具并执行以下命令:
C:\Windows\system32>net localgroup dmdba /add
C:\Windows\system32>net localgroup dmdba dameng_dba /add
Linux 操作系统下:
[dameng@test163 ~]$ sudo groupadd dmdba
[dameng@test163 ~]$ sudo usermod -G dmdba dameng_dba
- 操作系统用户 dameng_dba 以 SYSDBA 身份登录数据库。
以 Windows 操作系统为例:
D:\dmdbms\bin>disql.exe /@localhost:5236 as sysdba
2.3.2.2 远程验证
远程验证需要借助 SSL 数字证书来完成,用户需要拥有自己的 SSL 数字证书,并为 DM 服务器以及 DM 客户端或接口均配置好 SSL 环境。
远程验证需要将 DM 配置文件 dm.ini 的 ENABLE_REMOTE_OSAUTH 参数设置为 1,表示支持远程验证。同时需要将 ENABLE_ENCRYPT 参数设置为 1,表示开启 SSL 通信加密。关于 SSL 通信加密的详细介绍请参考 6.1 基于传输层的 SSL 协议加密。
上述参数均为静态参数,数据库管理员可以使用系统过程 SP_SET_PARA_VALUE 进行修改,但修改后需要重新启动 DM 服务器才能生效。由于开启了 SSL 通信加密,因此重启 DM 服务器之前必须保证当前服务器 SSL 环境配置完成,否则服务器无法正常启动。
远程验证创建用户的语法如下:
CREATE USER [IF NOT EXISTS] <用户名> IDENTIFIED EXTERNALLY ......;
说明“......”表示2.2节中创建用户语法从“<锁定子句>”开始往后的语法部分。
由于该创建用户的语法仅安全版支持,因此远程验证仅安全版支持。
远程验证仅支持使用交互方式连接 DM 服务器,用户名写为“//username”形式,无需输入密码,需要输入当前登录用户自身的 SSL 数字证书路径以及相应的 SSL 证书密码,如果证书没有密码则可以缺省或使用任意数字代替。
举例说明:
dameng_remote 用户使用当前操作系统上的 DM 客户端,基于远程验证方式连接远程 DM 服务器的操作步骤如下:
- 执行操作之前需要保证 dameng_remote 用户拥有自己的 SSL 数字证书,并且确认 DM 服务器以及 DM 客户端均已配置好 SSL 环境;
- 在数据库中创建 dameng_remote 用户,并修改 INI 参数。
SQL> CREATE USER dameng_remote IDENTIFIED EXTERNALLY;
SQL> SP_SET_PARA_VALUE(2,'ENABLE_REMOTE_OSAUTH',1);
SQL> SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',1);
SQL> COMMIT;
重新启动数据库服务器,使 INI 参数生效。
- 打开 SQL 交互式查询工具,执行 LOGIN 命令登录远程 DM 服务器,需要输入远程 DM 服务器 IP 地址和端口号,用户名写为“//username”形式,无需输入密码,还需输入当前登录用户自身的 SSL 数字证书路径以及相应的 SSL 证书密码。
SQL> LOGIN
服务名:192.168.0.1:5236
用户名://dameng_remote
密码:
SSL路径: E:\dmdbms\bin\client_ssl\dameng_remote
SSL密码:
UKEY名称:
UKEY PIN码:
MPP类型:
是否读写分离(y/n):
协议类型:
服务器[192.168.0.1:5236]:处于普通打开状态
登录使用时间 : 21.271(ms)
SQL>
2.3.3 LDAP 身份验证
DM 提供对 LDAP 的支持,主要利用 LDAP 服务器存储的账户数据信息,验证账户是否是数据库的合法用户。用户需要预先部署 LDAP 服务器和 CA 服务器(或者购买证书认证)。
要使用 LDAP 身份验证,首先要在 DM 配置文件 dm.ini 中添加参数 LDAP_HOST。此参数为 LDAP 数据源所在机器的主库名,假如主库名为 ldapserver.dameng.com,则 LDAP_HOST = ldapserver.dameng.com。
LDAP 身份验证创建用户的语法如下:
CREATE USER [IF NOT EXISTS] <用户名> IDENTIFIED EXTERNALLY AS <用户DN> ......;
说明“......”表示2.2节中创建用户语法从“<锁定子句>”开始往后的语法部分。
由于该创建用户的语法仅安全版支持,因此LDAP身份验证仅安全版支持。
语法中的“用户 DN”指 LDAP 数据源中用户 DN,可以唯一标识每一个用户。
例如,如果域名为 dameng.com,若以 Administrator 用户登录,按 DN 规范书写则 certificate_dn 为 cn=Administrator,cn=users,dc=dameng,dc=com。则创建用户语法可以写为:
Windows 操作系统下:
CREATE USER USER01 IDENTIFIED EXTERNALLY AS 'cn=Administrator,cn=users,
dc=dameng,dc=com';
Linux 操作系统下:
CREATE USER USER01 IDENTIFIED EXTERNALLY AS 'cn=root, dc=dameng,dc=com';
当用户使用 DM 客户端或接口登录 DM 数据库时,将用户名写为“/username”的形式,则表示以 LDAP 验证方式进行登录,登录密码为 LDAP 数据源中创建用户时使用的密码。
2.3.4 SSL 双因子身份验证
SSL 双因子身份验证支持本机验证和远程验证。用户需要拥有自己的 SSL 数字证书,并为 DM 服务器以及 DM 客户端或接口均配置好 SSL 环境。
SSL 双因子身份验证需要将 DM 配置文件 dm.ini 的 ENABLE_ENCRYPT 参数设置为 1、2 或 4,设置为 1 时会同时开启 SSL 认证和 SSL 通信加密功能,设置为 2 时仅开启 SSL 认证,设置为 4 时开启 SSL 加密不开启 SSL 认证。如果为远程验证,建议设置 ENABLE_ENCRYPT 为 1,开启 SSL 通信加密功能。如果为本机验证,则无需开启 SSL 通信加密功能。关于 SSL 通信加密的详细介绍请参考 6.1 基于传输层的 SSL 协议加密。
ENABLE_ENCRYPT 为静态参数,数据库管理员可以使用系统过程 SP_SET_PARA_VALUE 进行修改,但修改后需要重新启动 DM 服务器才能生效。由于开启了 SSL 认证,因此重启 DM 服务器之前必须保证当前服务器 SSL 环境配置完成,否则服务器无法正常启动。
使用 SSL 双因子身份验证方式连接 DM 服务器时,需要输入当前登录用户自身的 SSL 数字证书路径以及相应的 SSL 证书密码,如果证书没有密码则可以缺省或使用任意数字代替。
举例说明:
dameng_ssl 用户使用当前操作系统上的 DM 客户端,基于 SSL 双因子身份验证方式连接远程 DM 服务器的操作步骤如下:
- 执行操作之前需要保证 dameng_ssl 用户拥有自己的 SSL 数字证书,并且确认 DM 服务器和 DM 客户端均已配置好 SSL 环境;
- 在数据库中创建 dameng_ssl 用户,并修改 INI 参数。
SQL> CREATE USER dameng_ssl IDENTIFIED BY "Dameng12345";
SQL> SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',1);
SQL> COMMIT;
重新启动数据库服务器,使 INI 参数生效。
- dameng_ssl 基于 SSL 双因子身份验证方式连接远程 DM 服务器,需要输入用户名和密码、远程 DM 服务器 IP 地址和端口号以及当前登录用户自身的 SSL 数字证书路径以及相应的 SSL 证书密码。
D:\dmdbms\bin>disql.exe dameng_ssl/Dameng12345@192.168.0.1:5236#"{ssl_path=E:\dmdbms\bin\client_ssl\dameng_ssl,ssl_pwd=12345}"
2.3.5 KERBEROS 身份验证
KERBEROS 是为 TCP/IP 网络系统设计的可信的第三方认证协议,DM 支持 KERBEROS 身份验证。用户需要预先配置 KERBEROS 使用环境。
KERBEROS 身份验证创建用户的语法如下:
CREATE USER [IF NOT EXISTS] <用户名> IDENTIFIED EXTERNALLY ......;
说明“......”表示2.2节中创建用户语法从“<锁定子句>”开始往后的语法部分。
由于该创建用户的语法仅安全版支持,因此KERBEROS身份验证仅安全版支持。
当用户使用 DM 客户端或接口登录 DM 数据库时,将用户名写为“///username”的形式,则表示以 KERBEROS 验证方式进行登录,不需要输入密码。
2.3.6 UKEY 身份验证
DM 支持 UKEY 身份验证,通过 INI 参数 CLIENT_UKEY 进行 UKEY 验证设置,缺省值为 0:
0:支持所有登录方式,是否采用 UKEY 验证方式登录。当客户端输入 UKEY 名称和 UKEY_PIN 则采用 UKEY 验证,否则不使用 UKEY 验证;
1:客户端强制使用 UKEY 验证。
使用 UKEY 身份验证需要按照 8.1 节的介绍编写动态库,具体请参考 8.3 节的介绍。
2.3.7 RADIUS 身份验证
DM 支持 RADIUS 协议认证机制。DM 服务器作为客户端与 RADIUS 服务器经行交互。RADIUS 用于对于用户名、口令和质询信息的校验。
当对用户名、口令进行校验时,DM 服务器将一条 Access-Request 消息(包含用户名、口令等信息)发送给 RADIUS 服务器,消息会使用共享密钥(DM 和 RADIUS 的共享密钥)进行加密处理,RADIUS 服务器收到该消息后会使用 Access-Accept(表示接受)或 Access-Reject(表示拒绝)进行回复。回复消息为 Access-Reject 时,登录将会失败。
当对质询信息进行校验时,DM 服务器将一条 Access-Request 消息被发送给 RADIUS 服务器后,服务器可能会以 Access-Challenge(表示要求进一步对用户认证)进行回复。此时,DM 服务器将会向用户展示 RADIUS 服务器所提出的问题,并将用户的回答重新发给服务器, 而后 RADIUS 服务器使用 Access-Accept 或 Access-Reject 进行回复。
使用 RADIUS 协议须提前配置文件 dmradius.ini,并将其和 dm.ini 放置在同一目录下。
参数 | 说明 |
---|---|
RADIUS_SERVER | RADIUS 验证服务器 IP 地址 |
RADIUS_PORT | RADIUS 服务器的端口号 |
RADIUS_SECRET | 与 RADIUS 服务器进行通信的共享密钥。DM 和 RADIUS 服务器的共享密钥必须相同,否则无法通信 |
2.4 如何修改用户信息
为了防止不法之徒盗取用户的口令,用户应该经常改变自己的口令。用户的口令不应该是类似 ABCabc123 这样简单的字符串,也不建议指定为自己的姓名和生日,因为这样的口令很容易被破解。一个好的口令应该包含大小写字母、数字、特殊符号在内的混合字符串。统计表明,一个口令中包含的成分越复杂,就越难破译。
修改用户口令的操作一般由用户自己完成,SYSDBA、SYSSSO、SYSAUDITOR 和 SYSDBO 可以无条件修改同类型的用户的口令。普通用户只能修改自己的口令,如果需要修改其他用户的口令,必须具有 ALTER USER 数据库权限。修改用户口令时,口令策略应符合创建该用户时指定的口令策略。
注意具有ALTER USER权限的用户可以修改包括管理员在内的所有用户的口令和用户资源限制,因此对ALTER USER权限的授予应慎之又慎。
使用 ALTER USER 语句可修改用户口令。除口令外,这个语句还可以修改用户的口令策略、空间限制、只读属性以及资源限制等。
ALTER USER 的语法与创建用户的语法极为相似,具体语法格式如下:
ALTER USER <用户名> [<修改用户子句>] | [<用户代理功能子句>];
<修改用户子句> ::= [IDENTIFIED <身份验证模式>] [PASSWORD_POLICY <口令策略>] [<锁定子句>] [<存储加密密钥>] [<只读标志>][<资源限制子句>][<密码过期子句>] [<允许IP子句>][<禁止IP子句>][<允许时间子句>][<禁止时间子句>][<TABLESPACE子句>][<INDEX_TABLESPACE子句>][<SCHEMA子句>][<表空间配额子句>]
<SCHEMA子句> ::= ON SCHEMA <模式名>
<用户代理功能子句> ::= <GRANT | REVOKE> CONNECT THROUGH <代理用户名>
< 修改用户子句 > 中的 <SCHEMA 子句 > 用于设置用户的缺省模式,其余子句的具体语法格式请参考 2.2.1 创建用户。
< 用户代理功能子句 > 用于赋予用户 B 能够以代理的身份认证登录用户 A 的权限,即 CONNECT THROUGH 权限。其中,用户 B 表示参数 < 代理用户名 > 指定的用户,用户 A 表示参数 < 用户名 > 指定的用户。关键字 GRANT 表示赋予权限,关键字 REVOKE 表示收回权限。
例 下面的语句修改用户 BOOKSHOP_USER 的只读属性为只读。
ALTER USER BOOKSHOP_USER READ ONLY;
注意不论DM的INI参数DDL_AUTO_COMMIT设置为自动提交还是非自动提交,ALTER USER操作都会被自动提交。
2.5 如何删除用户
当一个用户不再需要访问数据库系统时,应将这个用户及时地从数据库中删除,否则可能会有安全隐患。
删除用户的操作一般由 SYSDBA、SYSSSO、SYSAUDITOR 和 SYSDBO 完成,他们可以删除同类型的其他用户。普通用户要删除其他用户,需要具有 DROP USER 权限。
使用 DROP USER 语句删除语句,语法格式为:
DROP USER [IF EXISTS] <用户名> [RESTRICT | CASCADE];
一个用户被删除后,这个用户本身的信息,以及它所拥有的数据库对象的信息都将从数据字典中被删除。
指定 IF EXISTS 关键字后,删除不存在的用户时不会报错,否则会报错。
如果在删除用户时未使用 CASCADE 选项(缺省使用 RESTRICT 选项),若该用户建立了数据库对象,DM 将返回错误信息,而不删除此用户。
如果在删除用户时使用了 CASCADE 选项,除数据库中该用户及其创建的所有对象被删除外,若其他用户创建的对象引用了该用户的对象,DM 还将自动删除相应的引用完整性约束及依赖关系。
例 假设用户 BOOKSHOP_USER 建立了自己的表或其他数据库对象,执行下面的语句:
DROP USER BOOKSHOP_USER;
将提示错误信息“试图删除被依赖对象[BOOKSHOP_USER]”。
下面的语句则能成功执行,会将 BOOKSHOP_USER 所建立的数据库对象一并删除。
DROP USER BOOKSHOP_USER CASCADE;
注意正在使用中的用户可以被其他具有DROP USER权限的用户删除,被删除的用户继续做操作或尝试重新连接数据库会报错。