用户标识与鉴别

用户标识与鉴别对试图登录数据库进行数据访问的用户进行身份验证,以确认此用户是否能与某一数据库用户进行关联,并根据关联的数据库用户的权限对此用户在数据库中的数据访问活动进行安全控制。

2.1 DM的管理用户

在现实生活中,任何一个系统如果将所有的权利都赋予给某一个人,而不加以监督和控制,势必会产生权利滥用的风险。从数据库安全角度出发,一个大型的数据库系统有必要将数据库系统的权限分配给不同的角色来管理,并且各自偏重于不同的工作职责,使之能够互相限制和监督,从而有效保证系统的整体安全。

DM数据库采用“三权分立”或“四权分立”的安全机制,将系统中所有的权限按照类型进行划分,为每个管理员分配相应的权限,管理员之间的权限相互制约又相互协助,从而使整个系统具有较高的安全性和较强的灵活性。

可在创建DM数据库时通过建库参数PRIV_FLAG设置使用“三权分立”或“四权分立”安全机制,0表示“三权分立”,1表示“四权分立”。此参数仅在DM安全版本下提供,即仅DM安全版本提供“四权分立”安全机制,缺省采用“三权分立”安全机制。

使用“三权分立”安全机制时,将系统管理员分为数据库管理员、数据库安全员和数据库审计员三种类型。在安装过程中,DM数据库会预设数据库管理员账号SYSDBA、数据库安全员账号SYSSSO和数据库审计员账号SYSAUDITOR,其缺省口令都与用户名一致。

使用“四权分立”的安全机制时,将系统管理员分数据库管理员、数据库对象操作员、数据库安全员和数据库审计员四种类型,在“三权分立”的基础上,新增数据库对象操作员账户SYSDBO,其缺省口令为SYSDBO。

注意

各管理员应在安装过程中或安装完毕后立即修改缺省口令,避免因口令泄漏造成的安全问题。

数据库管理员(DBA)

每个数据库至少需要一个DBA来管理,DBA可能是一个团队,也可能是一个人。在不同的数据库系统中,数据库管理员的职责可能也会有比较大的区别,总体而言,数据库管理员的职责主要包括以下任务:

  • 评估数据库服务器所需的软、硬件运行环境
  • 安装和升级DM 服务器
  • 数据库结构设计
  • 监控和优化数据库的性能
  • 计划和实施备份与故障恢复

数据库安全员(SSO)

有些应用对于安全性有着很高的要求,传统的由DBA一人拥有所有权限并且承担所有职责的安全机制可能无法满足企业实际需要,此时数据库安全员和数据库审计员两类管理用户就显得异常重要,它们对于限制和监控数据库管理员的所有行为都起着至关重要的作用。

数据库安全员的主要职责是制定并应用安全策略,强化系统安全机制。数据库安全员SYSSSO是DM数据库初始化的时候就已经创建好的,可以以该用户登录到DM数据库来创建新的数据库安全员。

SYSSSO或者新的数据库安全员都可以制定自己的安全策略,在安全策略中定义安全级别、范围和组,然后基于定义的安全级别、范围和组来创建安全标记,并将安全标记分别应用到主体(用户)和客体(各种数据库对象,如表、索引等),以便启用强制访问控制功能。

数据库安全员不能对用户数据进行增、删、改、查,也不能执行普通的DDL操作如创建表、视图等。他们只负责制定安全机制,将合适的安全标记应用到主体和客体,通过这种方式可以有效的对DBA的权限进行限制,DBA此后就不能直接访问添加有安全标记的数据,除非安全员给DBA也设定了与之匹配的安全标记,DBA的权限受到了有效的约束。数据库安全员也可以创建和删除新的安全用户,向这些用户授予和回收安全相关的权限,具体参见3.2.1节。

数据库审计员(AUDITOR)

我们可以想象一下,某个企业内部DBA非常熟悉公司内部ERP系统的数据库设计,该系统包括了员工工资表,里面记录了所有员工的工资,公司的出纳通过查询系统内部员工工资表来发放工资。传统的DBA集所有权利于一身,可以很容易修改工资表,从而导致公司工资账务错乱。为了预防该问题,可以采用前面数据库安全员制定安全策略的方法,避免DBA或者其他数据库用户具有访问该表的权限。为了能够及时找到DBA或者其他用户的非法操作,在DM数据库中还可以在系统建设初期,由数据库审计员(SYSAUDITOR或者其他由SYSAUDITOR创建的审计员)来设置审计策略(包括审计对象和操作),在需要时,数据库审计员可以查看审计记录,及时分析并查找出幕后真凶。

从上面的介绍中我们也可以看出,在DM数据库中,审计员的主要职责就是创建和删除数据库审计员,设置/取消对数据库对象和操作的审计设置,查看和分析审计记录等。

数据库对象操作员(DBO)

数据库对象操作员是“四权分立”新增加的一类用户,可以创建数据库对象,并对自己拥有的数据库对象(表、视图、存储过程、序列、包、外部链接等)具有所有的对象权限并可以授出与回收,但其无法管理与维护数据库对象。

2.2 如何创建用户

数据库系统在运行的过程中,往往需要根据实际需求创建用户,然后为用户指定适当的权限。创建用户的操作一般只能由系统预设用户SYSDBA、SYSSSO和SYSAUDITOR完成,如果普通用户需要创建用户,必须具有CREATE USER的数据库权限。

创建用户的命令是CREATE USER,创建用户所涉及的内容包括为用户指定用户名、认证模式、口令、口令策略、空间限制、只读属性以及资源限制。其中用户名是代表用户账号的标识符,长度为1~128个字符。用户名可以用双引号括起来,也可以不用,但如果用户名以数字开头,必须用双引号括起来。

在DM中使用CREATE USER语句创建用户,具体的语法格式如下:

<身份验证模式> ::= <数据库身份验证模式>|<外部身份验证模式>
<数据库身份验证模式> ::= BY <口令>[<散列选项>]
<散列选项> ::= HASH WITH [<密码引擎名>.]<散列算法> [<加盐选项>]
<散列算法> ::= MD5 | SHA1 | SHA224 | SHA256 | SHA384 | SHA512
<加盐选项> ::= [NO] SALT
<外部身份验证模式> ::= EXTERNALLY | EXTERNALLY AS <用户DN>
<口令策略> ::= 口令策略项的任意组合
<锁定子句> ::= ACCOUNT LOCK | ACCOUNT UNLOCK
<存储加密密钥> ::= ENCRYPT BY <口令>
<空间限制子句> ::= DISKSPACE LIMIT <空间大小>| DISKSPACE UNLIMITED
<只读标志> ::= READ ONLY | NOT READ ONLY
<资源限制子句> ::= 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_ATTEMPS <参数设置>|
			PASSWORD_LIFE_TIME <参数设置>| 
			PASSWORD_REUSE_TIME <参数设置>|
			PASSWORD_REUSE_MAX <参数设置>| 
			PASSWORD_LOCK_TIME <参数设置>| 
			PASSWORD_GRACE_TIME <参数设置>
<参数设置> ::=<参数值>| UNLIMITED
<允许IP子句> ::= ALLOW_IP <IP项>{,<IP项>}
<禁止IP子句> ::= NOT_ALLOW_IP <IP项>{,<IP项>}
<IP项> ::= <具体IP>|<网段>
<允许时间子句> ::= ALLOW_DATETIME <时间项>{,<时间项>}
<禁止时间子句> ::= NOT_ALLOW_DATETIME <时间项>{,<时间项>}
<时间项> ::= <具体时间段> | <规则时间段>
<具体时间段> ::= <具体日期><具体时间> TO <具体日期><具体时间>
<规则时间段> ::= <规则时间标志><具体时间> TO <规则时间标志><具体时间>
<规则时间标志> ::= MON | TUE | WED | THURS | FRI | SAT | SUN
<TABLESPACE子句> ::=DEFAULT TABLESPACE <表空间名>

注意

外部身份验证仅在DM安全版本中才提供支持。

资源限制子句将在第9章进行详细介绍。

例如,创建用户名为BOOKSHOP_USER、口令为BOOKSHOP_PASSWORD、会话超时为3分钟的用户。

CREATE USER BOOKSHOP_USER IDENTIFIED BY BOOKSHOP_PASSWORD LIMIT CONNECT_TIME 3;

2.2.1 口令策略

用户口令最长为48字节,创建用户语句中的PASSWORD POLICY子句用来指定该用户的口令策略,系统支持的口令策略有:

  • 0 无限制。但总长度不得超过48个字节
  • 1 禁止与用户名相同
  • 2 口令长度需大于等于INI参数PWD_MIN_LEN设置的值
  • 4 至少包含一个大写字母(A-Z)
  • 8 至少包含一个数字(0-9)
  • 16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)

口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略2和4,则设置口令策略为2+4=6即可。

除了在创建用户语句中指定该用户的口令策略,DM的INI参数PWD_POLICY可以指定系统的默认口令策略,其参数值的设置规则与PASSWORD_POLICY <口令策略>子句一致,缺省值为2。若在创建用户时没有使用PASSWORD_POLICY <口令策略>子句指定用户的口令策略,则使用系统的默认口令策略。

系统管理员可通过查询V$PARAMETER动态视图查询PWD_POLICY的当前值。

SELECT * FROM V$PARAMETER WHERE NAME= 'PWD_POLICY';

也可以通过使用客户端工具Console或调用系统过程SP_SET_PARA_VALUE重新设置PWD_POLICY的值。

使用客户端工具Console

DBA用户在DM控制台Console工具中,配置DM数据库的PWD_POLICY参数值,如下图所示。

使用Console工具配置PWD_POLICY

图2.1 使用Console工具配置PWD_POLICY

需要注意的是,Console为脱机工具,对参数值的修改通过修改dm.ini文件中的参数值来进行,无论参数类型是静态还是动态,都需要重启DM服务器才能使新设置的参数值生效。

使用系统过程

DBA用户也可以使用系统过程SP_SET_PARA_VALUE来配置PWD_POLICY参数值,关于SP_SET_PARA_VALUE的详细介绍请参考《DM8_SQL语言使用手册》。

例如,将PWD_POLICY置为8,同时修改文件和内存参数,由于PWD_POLICY为动态INI参数,这样设置后新的参数值可以立即生效。

SP_SET_PARA_VALUE(1, 'PWD_POLICY',8);
建议

DM的INI参数都可以通过上述使用客户端工具Console或调用系统过程SP_SET_PARA_VALUE/SP_SET_PARA_DOUBLE_VALUE/ SP_SET_PARA_STRING_VALUE的方法来进行设置,后续不再具体描述。

2.3 用户身份验证模式

DM提供数据库身份验证模式和外部身份验证模式来保护对数据库访问的安全。数据库身份验证模式需要利用数据库口令,即在创建或修改用户时指定用户口令,用户在登录时输入对应口令进行身份验证;外部身份验证模式支持基于操作系统(OS)的身份验证、LDAP身份验证和KERBEROS身份验证。

2.3.1 基于操作系统的身份验证

基于OS的身份验证分为本机验证和远程验证,本机验证需要将DM配置文件dm.ini的ENABLE_LOCAL_OSAUTH参数设置为1(缺省为0);而远程验证需要将DM配置文件dm.ini的ENABLE_REMOTE_OSAUTH参数设置为1(缺省为0),表示支持远程验证,同时还要将dm.ini的ENABLE_ENCRYPT参数设置为1(缺省为1),表示采用SSL安全连接。这三个参数均为静态参数,数据库管理员可以使用系统过程SP_SET_PARA_VALUE进行修改,但修改后需要重新启动DM服务器才能生效。

基于OS的身份验证需要首先将操作系统用户加入到操作系统的dmdba|dmsso|dmauditor用户组,分别对应数据库的SYSDBA|SYSSSO|SYSAUDITOR用户。也可以将操作系统用户加入到操作系统的dmusers用户组来进行基于OS的身份验证,对应数据库的同名用户,即此时数据库中需要存在一个与操作系统用户同名的用户。

例如:操作系统用户dameng基于OS的身份验证登录数据库。

  1. 在数据库中创建一个操作系统的同名用户,并修改相关参数。
SQL> CREATE USER dameng IDENTIFIED BY "dameng12345";

SQL> SP_SET_PARA_VALUE(2,'ENABLE_LOCAL_OSAUTH',1);

SQL> COMMIT;

重新启动数据库服务器,使INI参数生效。

  1. 在操作系统中创建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
  1. 操作系统用户dameng基于OS的身份验证登录数据库。

以Windows操作系统为例:

D:\dmdbms\bin>disql.exe /@localhost:5236 as users

DM的disql、dmfldr、dmdbg、dexp和dimp等工具都支持基于操作系统的身份验证登录,具体登录方式可查看各工具操作手册。

2.3.2 LDAP身份验证

DM提供对LDAP的支持,主要利用LDAP服务器存储的账户数据信息,验证账户是否是数据库的合法用户。我们假定企业已经部署了LDAP服务器和CA服务器(或者花钱购买了证书认证)。

要使用LDAP身份验证,首先要在DM配置文件dm.ini中添加参数LDAP_HOST。此参数为LDAP数据源所在机器的主库名,假如主库名为ldapserver.dameng.org,则LDAP_HOST = ldapserver.dameng.org。

LDAP身份验证创建用户的语法如下:

CREATE USER <用户名>IDENTIFIED EXTERNALLY AS <用户DN> ......;
建议

“......”表示2.2节中创建用户语法从“<锁定子句>”开始往后的语法部分。

语法中的“用户DN”指LDAP数据源中用户DN,可以唯一标识每一个用户。

例如,如果域名为dameng.org,若以Administrator用户登录,按DN规范书写则certificate_dn为cn=Administrator,cn=users,dc=dameng,dc=org。则创建用户语法可以写为:

Windows操作系统下:

CREATE USER USER01 IDENTIFIED EXTERNALLY AS 'cn=Administrator,cn=users,
dc=dameng,dc=org';

Linux操作系统下:

CREATE USER USER01 IDENTIFIED EXTERNALLY AS 'cn=root, dc=dameng,dc=org';

当用户使用DM客户端或接口登录DM数据库时,将用户名写为“/username”的形式,则表示以LDAP验证方式进行登录,登录密码为LDAP数据源中创建用户时使用的密码。

2.3.3 KERBEROS身份验证

KERBEROS是为TCP/IP网络系统设计的可信的第三方认证协议,DM支持KERBEROS身份验证。我们假设用户已经正确配置了KERBEROS使用环境。

KERBEROS身份验证创建用户的语法如下:

CREATE USER <用户名>IDENTIFIED EXTERNALLY ......;
建议

“......”表示2.2节中创建用户语法从“<锁定子句>”开始往后的语法部分。

当用户使用DM客户端或接口登录DM数据库时,将用户名写为“///username”的形式,则表示以KERBEROS验证方式进行登录,不需要输入密码。

2.3.4 UKEY身份验证

DM支持UKEY身份验证,通过INI参数CLIENT_UKEY进行UKEY验证设置,默认值为0:

0:支持所有登录方式,是否采用UKEY验证由客户端驱动。当客户端输入UKEY名称和UKEY_PIN则采用UKEY验证,否则不使用UKEY验证;

1:客户端强制使用UKEY验证。

使用UKEY身份验证需要按照8.1节的介绍编写动态库,具体请参考8.3节的介绍。

2.4 如何修改用户信息

为了防止不法之徒盗取用户的口令,用户应该经常改变自己的口令。用户的口令不应该是类似12345,abcdef这样简单的字符串,更不要指定为自己的生日或姓名,也不要指定为一个英文单词,因为这样的口令很容易被破解。一个好的口令应该包含大小写字母、数字、特殊符号在内的混合字符串。统计表明,一个口令中包含的成分越复杂,就越难破译。

修改用户口令的操作一般由用户自己完成,SYSDBA、SYSSSO、SYSAUDITOR可以无条件修改同类型的用户的口令。普通用户只能修改自己的口令,如果需要修改其他用户的口令,必须具有ALTER USER数据库权限。修改用户口令时,口令策略应符合创建该用户时指定的口令策略。

注意

具有ALTER USER权限的用户可以修改包括管理员在内的所有用户的口令和用户资源限制,因此对ALTER USER权限的授予应慎之又慎。

使用ALTER USER语句可修改用户口令。除口令外,这个语句还可以修改用户的口令策略、空间限制、只读属性以及资源限制等。

ALTER USER的语法与创建用户的语法极为相似,具体语法格式如下:

ALTER USER <用户名> [IDENTIFIED <身份验证模式>][PASSWORD_POLICY <口令策略>][<锁定子句>][<存储加密密钥>][<空间限制子句>][<只读标志>][<资源限制子句>][<允许IP子句>][<禁止IP子句>][<允许时间子句>][<禁止时间子句>][<TABLESPACE子句>][<SCHEMA子句>];

每个子句的具体语法参见创建用户语法说明

例如,下面的语句修改用户BOOKSHOP_USER的空间限制为20M。

ALTER USER BOOKSHOP_USER DISKSPACE LIMIT 20;
注意

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

2.5 如何删除用户

当一个用户不再需要访问数据库系统时,应将这个用户及时地从数据库中删除,否则可能会有安全隐患。

删除用户的操作一般由SYSDBA、SYSSSO、SYSAUDITOR完成,他们可以删除同类型的其他用户。普通用户要删除其他用户,需要具有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权限的用户删除,被删除的用户继续做操作或尝试重新连接数据库会报错。

微信扫码
分享文档
扫一扫
联系客服