摘要
1
2
SQL > ALTER USER SYSTEM IDENTIFIED BY "newpassword" ;
SQL > ALTER USER SYS IDENTIFIED BY "newpassword" ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL > select username , account_status from dba_users ;
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
MGMT_VIEW OPEN
SYS OPEN
SYSTEM OPEN
DBSNMP OPEN
SYSMAN OPEN
ABC OPEN
B OPEN
KOU OPEN
OUTLN EXPIRED & LOCKED
FLOWS_FILES EXPIRED & LOCKED
MDSYS EXPIRED & LOCKED
ORDSYS EXPIRED & LOCKED
SQL >
说明: 如果不使用EM,可以停用MGMT_VIEW,DBSNMP,SYSMAN
帐号.
1
2
SQL > drop user kou cascade ;
User dropped .
对于不明用途的帐号可以采用先锁定一段时间,再删除。
1
2
3
SQL > alter user MGMT_VIEW account lock ;
SQL > alter user DBSNMP account lock ;
SQL > alter user SYSMAN account lock ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SQL > alter user abc account unlock ;
User altered .
SQL > select username , account_status from dba_users ;
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
MGMT_VIEW OPEN
SYS OPEN
SYSTEM OPEN
DBSNMP OPEN
SYSMAN OPEN
B OPEN
ABC LOCKED
OUTLN EXPIRED & LOCKED
FLOWS_FILES EXPIRED & LOCKED
其它状态参数说明:
OPEN:正常的帐户; LOCKED:表示这个帐户被锁定; EXPIRED:表示该帐户口令到期,要求用户在下次logon的时候修改口令(系统会在该account被设置为expire后的第一次登陆是提示你修改密码); EXPIRED(GRACE):当设置了grace以后(第一次成功登录后到口令到期后有多少天时间可改变口令,在这段时间内,帐户被提醒修改口令并可以正常登陆,account_status显示为EXPIRED(GRACE). LOCKED(TIMED):这种状态表示失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定,需要注意的是,默认的DEFAULT值是10次; EXPIRED & LOCKED:表示此账户被设置为口令到期且被锁定; EXPIRED(GRACE) & LOCKED(TIMED):当account_stutus为EXPIRED(GRACE)的时候,用户又尝试失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定; EXPIRED & LOCKED(TIMED):当设置了account expire后,用户又失败的login次数超过了; FAILED_LOGIN_ATTEMPTS:被系统自动锁定; EXPIRED(GRACE) & LOCKED:用户account_status为EXPIRED(GRACE)后,又被DBA 手工锁定帐户后的状态; 默认状态下系统管理员是可以远程登录的,采用如下方式验证。
1
2
3
4
5
6
7
8
9
10
11
12
$ sqlplus sys/oracle@primarydb as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Mon Nov 18 10:04:57 2019
Copyright ( c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
说明: 远程登录访问不登录密码文件进行验证。
1
2
3
SQL > alter system set remote_login_passwordfile = none scope = spfile ;
SQL > shutdown immediate ;
SQL > startup ;
有些安全配置要求,限制本地操作系统认证登录,配置如下。
1
2
3
$ vi /data/oracle/product/11.2.0/db_1/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= none
1
2
$ sqlplus system/oracle@primarydb as sysdba
$ sqlplus / as sysdba
说明: 以上两条如果都启的话,SYSDBA用户将无法登录,数据库也无法启动,如果要进行管理操作,需要变通操作。
Oracle提供三种标准的角色: connect
,resource
和dba
,限制DBA权限的用户使用.
1
2
3
4
5
SQL > select * from dba_sys_privs where grantee = 'ABC' ;
GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
ABC UNLIMITED TABLESPACE NO
1
2
3
4
5
6
7
SQL > select * from dba_role_privs where grantee = 'ABC' ;
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
ABC CONNECT NO YES
ABC RESOURCE NO YES
SQL >
1
2
3
SQL > select * from dba_tab_privs where grantee = 'ABC' ;
no rows selected
参考配置操作, 对于DBA权限,需要判断是否需要DBA权限,否则都应取消dba权限,降为普通权,需要应用方DBA进行调整。
说明:通常对管理帐号与维护帐号时行密码策略,业务帐号不做策略限制,例如应用帐号过期,会影响业务的正常使用等情况,默认使用DEFAULT策略。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SQL > SELECT profile , username FROM dba_users WHERE username = 'SYS' ;
PROFILE
--------
DEFAULT
SQL > SELECT profile , resource_type , resource_name , limit FROM dba_profiles WHERE resource_type = 'PASSWORD' AND profile = 'DEFAULT' ;
PROFILE RESOURCE RESOURCE_NAME LIMIT
------- -------- ------------------------ ---------
DEFAULT PASSWORD FAILED_LOGIN_ATTEMPTS 10
DEFAULT PASSWORD PASSWORD_LIFE_TIME UNLIMITED
DEFAULT PASSWORD PASSWORD_REUSE_TIME UNLIMITED
DEFAULT PASSWORD PASSWORD_REUSE_MAX UNLIMITED
DEFAULT PASSWORD PASSWORD_VERIFY_FUNCTION NULL
DEFAULT PASSWORD PASSWORD_LOCK_TIME UNLIMITED
DEFAULT PASSWORD PASSWORD_GRACE_TIME UNLIMITED
说明:utlpwdmg.sql
脚本中包括密码策略及帐号策略, 该脚本后面是帐号策略的配置,可以事先注释掉,后面再一一启用。
在Oracle11G中,运行utlpwdmg.sql
会创建两个函数,一个是新版本的口令校验函数,一个是老版本的。
从12.2开始,之前两个VERIFY_FUNCTION
和VERIFY_FUNCTION_11G
密码验证函数将不再被使用。由ORA12C_VERIFY_FUNCTION
和ORA12C_STRONG_VERIFY_FUNCTION
两个函数来代替,从而提高密码的安全复杂性。
1
2
3
4
SQL > alter system set resource_limit = true ;
SQL > @ $ ORACLE_HOME / rdbms / admin / utlpwdmg . sql
SQL > alter profile default limit PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION ;
SQL > alter profile default limit PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION_11G ;
停止密码检验函数
1
SQL > alter profile default limit password_verify_function null ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL > create profile SYSTEM_PROFILE LIMIT
PASSWORD_LIFE_TIME 60
PASSWORD_GRACE_TIME 10
PASSWORD_REUSE_TIME 1800
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME 1 / 2
PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION ;
相关参数说明 :
PASSWORD_LIFE_TIME : 口令的生存期(天)
PASSWORD_GRACE_TIME : 口令失效后从第一次成功登录算起的更改口令的宽限期(天)
PASSWORD_REUSE_TIME : 可以重新使用口令前的天数
PASSWORD_REUSE_MAX : 可以重新使用口令的最多次数
FAILED_LOGIN_ATTEMPTS : 允许登录失败的次数
PASSWORD_LOCK_TIME : 达到登录失败次数后,帐户锁定的天数,过了这个天数之后帐户会自动解锁
PASSWORD_VERIFY_FUNCTION : 检验口令设置的 PL / SQL 函数
1
2
SQL > alter user sys profile SYSTEM_PROFILE ;
SQL > alter user system profile SYSTEM_PROFILE ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL > CREATE PROFILE APP_PROFILE LIMIT
COMPOSITE_LIMIT UNLIMITED
SESSIONS_PER_USER UNLIMITED
CPU_PER_SESSION UNLIMITED
CPU_PER_CALL UNLIMITED
LOGICAL_READS_PER_SESSION UNLIMITED
LOGICAL_READS_PER_CALL UNLIMITED
IDLE_TIME UNLIMITED
CONNECT_TIME UNLIMITED
PRIVATE_SGA UNLIMITED
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_LOCK_TIME 1
PASSWORD_GRACE_TIME 7
PASSWORD_VERIFY_FUNCTION NULL ;
1
SQL > alter user TEST_USER profile APP_PROFILE ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL > ALTER PROFILE SYSTEM_PROFILE LIMIT
PASSWORD_LIFE_TIME 60
PASSWORD_GRACE_TIME 10
PASSWORD_REUSE_TIME 1800
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1 / 1440
PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION ;
相关参数说明 :
PASSWORD_LIFE_TIME : 口令的生存期(天)
PASSWORD_GRACE_TIME : 口令失效后从第一次成功登录算起的更改口令的宽限期(天)
PASSWORD_REUSE_TIME : 可以重新使用口令前的天数
PASSWORD_REUSE_MAX : 可以重新使用口令的最多次数
FAILED_LOGIN_ATTEMPTS : 允许登录失败的次数
PASSWORD_LOCK_TIME : 达到登录失败次数后,帐户锁定的天数,过了这个天数之后帐户会自动解锁
PASSWORD_VERIFY_FUNCTION : 检验口令设置的 PL / SQL 函数
查看结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL > set linesize 200 ;
SQL > SELECT profile , resource_type , resource_name , limit FROM dba_profiles WHERE resource_type = 'PASSWORD' AND profile = 'SYSTEM_PROFILE' ;
PROFILE RESOURCE RESOURCE_NAME LIMIT
------------------------------ -------- -------------------------------- ----------------------------------------
DEFAULT PASSWORD FAILED_LOGIN_ATTEMPTS 3
DEFAULT PASSWORD PASSWORD_LIFE_TIME 60
DEFAULT PASSWORD PASSWORD_REUSE_TIME 1800
DEFAULT PASSWORD PASSWORD_REUSE_MAX UNLIMITED
DEFAULT PASSWORD PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION
DEFAULT PASSWORD PASSWORD_LOCK_TIME . 0006
DEFAULT PASSWORD PASSWORD_GRACE_TIME 10
7 rows selected .
取消Oracle密码复杂度检查:
1
2
SQL > ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL ;
SQL > ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED ;
恢复DEFAULT PROFILE
修改密码永不过期,因为业务用户密码过期会造成不必要的麻烦。
1
SQL > alter profile default limit password_life_time unlimited ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SQL > CREATE PROFILE ABC_PROFILE LIMIT
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_GRACE_TIME 10
PASSWORD_REUSE_TIME 1800
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1 / 1440 ;
SQL > alter user abc profile ABC_PROFILE ;
User altered .
SQL > SELECT profile , resource_type , resource_name , limit FROM dba_profiles WHERE resource_type = 'PASSWORD' AND profile = 'ABC_PROFILE' ;
PROFILE RESOURCE RESOURCE_NAME LIMIT
------------------------------ -------- -------------------------------- ----------------------------------------
ABC_PROFILE PASSWORD FAILED_LOGIN_ATTEMPTS 3
ABC_PROFILE PASSWORD PASSWORD_LIFE_TIME UNLIMITED
ABC_PROFILE PASSWORD PASSWORD_REUSE_TIME 1800
ABC_PROFILE PASSWORD PASSWORD_REUSE_MAX UNLIMITED
ABC_PROFILE PASSWORD PASSWORD_VERIFY_FUNCTION NULL
ABC_PROFILE PASSWORD PASSWORD_LOCK_TIME . 0006
ABC_PROFILE PASSWORD PASSWORD_GRACE_TIME 10
1
2
3
4
5
6
7
8
SQL > show parameter audit ;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string / data / oracle / admin / orcl / adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string DB
1
2
SQL > alter system set audit_sys_operations = TRUE scope = spfile ;
SQL > alter system set audit_trail = db , extended scope = spfile ;
audit_sys_operations=TRUE 管理员审计开启
需要重启数据库才能生效
1
SQL > alter system set audit_trail = none scope = spfile ;
只有SYSDBA才能访问数据字典基础表,普通用户不能查看X$开头的表。
1
2
3
4
5
6
7
8
9
10
SQL > show parameter O7_DICTIONARY_ACCESSIBILITY
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY boolean FALSE
SQL >
SQL > alter system set O7_DICTIONARY_ACCESSIBILITY = TRUE scope = spfile ;
SQL > shutdown immediate ;
SQL > startup ;
只有信任的IP地址才能通过监听器访问数据库,非信任的客户端会被拒绝, 本机IP地址一定要在信任之列。
通常对应用服务与数据库服务器加入信任列表。
1
2
3
4
5
6
7
$ vi $ORACLE_HOME /network/admin/sqlnet.ora
tcp.validnode_checking = yes
tcp.invited_nodes = ( 192.168.233.150,192.168.233.151)
#除以下IP地址之外都允许访问。
tcp.excluded_nodes = ( IP1,IP2,...)
重启监听即可。
1
2
3
$ vi $ORACLE_HOME /network/admin/sqlnet.ora
SQLNET.EXPIRE_TIME = 60
说明:客户端连接后在设置的时间内没有任何操作,客户端会自动断开。
创建一个用户
1
SQL > create user test identified by test ;
可以看到报错密码和用户名相同
再次尝试
1
SQL > create user test identified by test1 ;
提示:密码至少应包含一个数字,一个字符和一个标点符号
再来一次
1
SQL > create user test identified by test_1 ;
成功!
注意
当Oracle数据库用户的密码含特殊字符如 @ 时,直接使用正常的密码输入,由于oracle将@后的字符解析为网络服务名而导致登陆失败
1
SQL > create user test identified by "test!1" ;
注意创建的时候用双引号
Linux平台登录方式:’test/“test!1@#”’@orcl
1个双引号括密码,1个单引号括用户名+密码,即: ‘用户名/“密码”’@服务名