Oracle 数据库安全相关
/* 密码政策
* PASSWORD_RUSE_TIME --单位为天,说明在指定的天数之内,设定的密码不能重复。
* PASSWORD_REUSE_MAX --口令最大的使用次数,也就是说修改口令时,这个口令可重用的次数。
* PASSWORD_LIFE_TIME --用户口令的生命周期,密码最长使用时间
* FAILED_LOGIN_ATTEMPTS=10 --用户在登录尝试失败n次后被锁定,锁定次数
* PASSWORD_LOCK_TIME=1 --登录尝试失败达到指定次数,用户锁定时长,单位:天
* PASSWORD_GRACE_TIME --密码锁定的宽限时间天数,用户口令使用时间超过其生命周期后,可以延续使用的天数,并且可延续时间内登录会有相应口令即将过期的提示。
* (1)PASSWORD_REUSE_MAX,PASSWORD_REUSE_TIME都为UNLIMITED,密码可以随意重用,没有任何限制。
* (2)PASSWORD_REUSE_MAX,PASSWORD_REUSE_TIME均为指定值时,必须满足这两者的条件时才可以重用密码。
* (3)当PASSWORD_REUSE_MAX,PASSWORD_REUSE_TIME两个有其中一个不为UNLIMITED,则密码永远不能重用。
* PASSWORD_VERIFY_FUNCTION --其自己提供了一个默认的脚本,但是用户可以创建自己的验证规则或使用第三方软件验证。
*/
SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='DEFAULT';
SELECT USERNAME,PROFILE FROM DBA_USERS WHERE ACCOUNT_STATUS='OPEN';
alter profile DEFAULT limit password_reuse_time unlimited;/*取消密码管理*/
alter profile DEFAULT limit password_verify_function null;/*停止密码检验函数*/
alter user 用户 identified by 密码 account unlock;/*如果用户已经被锁定,则执行,否则不用执行;*/
/*
* 开启oracle数据库默认密码政策
* 1.使用数据库dba管理员用户执行操作:sqlplus / as sysdba
* 2.@?/rdbms/admin/utlpwdmg.sql; // 执行后开启数据库默认密码政策 ,如创建失败则可能不是dba用户
*
*/
/* 密码复杂度
* PASSWORD_VERIFY_FUNCTION(为NULL时无密码复杂度)
* utlpwdmg.sql脚本目录$ORACLE_HOME/rdbms/admin/
* Oracle允许将复杂的PL/SQL密码验证脚本做为参数传递给PASSWORD_VERIFY_FUNCTION。
* 并且其自己提供了一个默认的脚本,但是用户可以创建自己的验证规则或使用第三方软件验证。
*/
SELECT*FROM DBA_PROFILES WHERE RESOURCE_TYPE='PASSWORD';
alter profile default limit password_verify_function verify_function;/*添加密码验证政策*/
alter profile default limit password_verify_function null;/*取消密码验证政策*/
/* 本地登录
* None:结果为none,本地登录
* EXCLUSIVE:(默认值)独占模式使用密码文件,官档中提到了“only one instance of one database”使用exclusive方式,在数据库中是可以执行对于sysdba用户的增加,修改,删除动作的,同样也可以修改sysdba用户的密码,这些更改会记录到密码文件中去。
* SHARED:在多个数据库间共享口令文件。
* true:如果你破解了对方操作系统的用户名和密码,remote_os_authent=true时,就可以直接连接 对方的数据库(不用用户和密码),这样很不安全,一般默认false即可。
*/
show parameter remote_login_passwordfile;
/* 查看所有正常使用账户
* 验证sys的口令是否为CHANGE_ON_INSTALL
* 登录验证system的口令是否为manager
* 登录验证dbsnmp的口今是否为dbsnmp
*/
SELECT USERNAME FROM DBA_USERS WHERE ACCOUNT_STATUS='OPEN';
/*Oracle 安全日志审计
* 查询语句:show parameter audit;如果audit_sys_operations值为FALSE就是没开审计
* 启用审计:alter system set audit_sys_operations=TRUE scope=spfile;
* 启用审计:alter system set audit_trail=db_extended scope=spfile;注意audit_trail要为DB_EXTENDED才记录执行的具体语句
* 关闭审计:alter system set audit_trail=FALSE scope=spfile; // none/false:禁用审计
* 参考:https://blog.csdn.net/edcvf3/article/details/7865688
*
* DBA_STMT_AUDIT_OPTS 描述了整个系统和用户的当前系统审计选项。
* USER_NAME 用户名,如果由用户审计。ANY CLIENT如果代表客户的代理访问正在被审计。NULL 用于全系统审计
* PROXY_NAME 为客户端执行操作的代理用户的名称。NULL如果客户端直接执行操作。
* AUDIT_OPTION 系统审计选项的名称
* SUCCESS WHENEVER SUCCESSFUL系统审计模式
* FAILURE WHENEVER NOT SUCCESSFUL系统审计模式
*/
SELECT * FROM DBA_STMT_AUDIT_OPTS;
/* DBA_PRIV_AUDIT_OPTS 描述了当前正在跨系统和由用户审核的系统权限。*/
SELECT * FROM DBA_PRIV_AUDIT_OPTS;
/* DBA_OBJ_AUDIT_OPTS 描述所有对象的审计选项
* 相关资料 https://docs.oracle.com/database/121/REFRN/GUID-A6E91022-1EF6-4805-A567-6E5AC45F8FC9.htm#REFRN23141
*/
SELECT * FROM DBA_OBJ_AUDIT_OPTS;
/* 查看在sqlnet.ora文件中是否配置参数
* 文件路径/oracle/oracle/product/10.2/network/admin/sqlnet.ora
* tcp.validnode_checking ,tcp,invited_nodes
* tcp.validnode_checking=yes
* tcp.invited_nodes=() #运维访问的IP列表,各IP之间用逗号分隔
* 查看(是否存在SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED);
*/
/* Oracle 11g数据库密码区分大小写的设置 → SEC_CASE_SENSITIVE_LOGON = TRUE.
*/
参考一:https://blog.csdn.net/weixin_39556811/article/details/111671120