一、用户/权限/角色管理
1、用户
1.1、获取用户DDL
获得单个用户的DDL: select dbms_metadata.get_ddl('USER','SCOTT') from dual; 获得所有用户的DDL: SELECT DBMS_METADATA.GET_DDL('USER',U.username) FROM DBA_USERS U; |
1.2、普通用户服务特殊管理权限
--1、普通用户服务生成AWR报告权限 grant select any dictionary to user_name; grant execute on DBMS_WORKLOAD_REPOSITORY to user_name; --2、普通用户赋予查看数据字典权限 grant select_catalog_role to user_name; |
1.3、查询出当前使用默认密码的用户帐号
Oracle数据库创建起来后,会创建很多辅助用户,这些用户帐号如果不去修改密码,他们使用的全部是默认密码
SELECT a.username, b.account_status 访问状态,b.LOCK_DATE 锁定时间,b.expiry_date 过期时间,b.created 创建时间 FROM dba_users_with_defpwd a JOIN dba_users b ON a.username = b.username ORDER BY 1; |
1.4、查看一个用户所有的权限及角色
select privilege from dba_sys_privs where grantee='RFUSER' union select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='RFUSER'); select granted_role from dba_role_privs where grantee='RFUSER'; |
1.5、获得创建用户脚本及权限
--获取创建用户脚本及权限 set line 199 set long 100000 set pages 1000 exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR', true); SELECT ( CASE WHEN ((SELECT COUNT(*) FROM dba_users WHERE username = '&&Username') > 0) THEN dbms_metadata.get_ddl ('USER', '&&Username') ELSE to_clob (' -- Note: User not found!') END ) extracted_ddl FROM dual UNION ALL SELECT ( CASE WHEN ((SELECT COUNT(*) FROM dba_ts_quotas WHERE username = '&&Username') > 0) THEN dbms_metadata.get_granted_ddl( 'TABLESPACE_QUOTA', '&&Username') ELSE to_clob (' -- Note: No TS Quotas found!') END ) FROM dual UNION ALL SELECT ( CASE WHEN ((SELECT COUNT(*) FROM dba_role_privs WHERE grantee = '&&Username') > 0) THEN dbms_metadata.get_granted_ddl ('ROLE_GRANT', '&&Username') ELSE to_clob (' -- Note: No granted Roles found!') END ) FROM dual UNION ALL SELECT ( CASE WHEN ((SELECT COUNT(*) FROM dba_sys_privs WHERE grantee = '&&Username') > 0) THEN dbms_metadata.get_granted_ddl ('SYSTEM_GRANT', '&&Username') ELSE to_clob (' -- Note: No System Privileges found!') END ) FROM dual UNION ALL SELECT ( CASE WHEN ((SELECT COUNT(*) FROM dba_tab_privs WHERE grantee = '&&Username') > 0) THEN dbms_metadata.get_granted_ddl ('OBJECT_GRANT', '&&Username') ELSE to_clob (' -- Note: No Object Privileges found!') END ) FROM dual |
2、权限
权限管理是 Oracle 系统的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限。Oracle 的权限分为系统权限和数据对象权限,共一百多种。
系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
对象权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)
权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级、System 系统级、Role 角色级。这些权限可以授予给用户、特殊用户public或角色,如果授予一个权限给特殊用户"Public"(用户public是oracle预定义的,每个用户享有这个用户享有的权限),那么就意味作将该权限授予了该数据库的所有用户。对管理权限而言,角色是一个工具,权限能够被授予给一个角色,角色也能被授予给另一个角色或用户。用户可以通过角色继承权限,除了管理权限外角色服务没有其它目的。权限可以被授予,也可以用同样的方式撤销。
Oracle 的角色存放在表 dba_roles 中,某角色包含的系统权限存放在 dba_sys_privs 中,包含的对象权限存放在 dba_tab_privs 中。
2.1、授权
--1、授权表上的读写权限 select 'grant select,insert,update,delete on '||owner||'.'||table_name||' to fslda_zhj;' from dba_tables where owner = 'PDEFSLP7'; --2、授权视图上的读写权限 select 'grant select,insert,update,delete on '||owner||'.'||view_name||' to fslda_zhj;' from dba_views where owner = 'PDEFSLP7'; --3、授权函数和存储过程的读写权限 select 'grant execute on ' || 'PDEFSLP7' || '.' || t.name || ' to fslda_zhj;' from (select distinct name from dba_source where owner = 'PDEFSLP7' and type in ('PROCEDURE', 'FUNCTION', 'PACKAGE', 'PACKAGE BODY', 'TYPE BODY', 'TRIGGER', 'TYPE')) t --4、授权序列的读写权限 select 'grant select,insert,update,delete on '||sequence_owner||'.'||sequence_name||' to fslda_zhj;' from dba_sequences where sequence_owner = 'PDEFSLP7' ; |
3、角色
3.1、获取角色DDL
SELECT DBMS_METADATA.GET_DDL('ROLE','ROLENAME') FROM DUAL; |
3.2、查询角色所拥有的权限
select * from role_sys_privs where role='角色名'; |
4、密码安全加固
4.1、刷新oracle密码
当生产环境oracle密码快过期时,如果修改密码的话应用程序也得对应停服务去修改密码,连接数据库的工具的密码全部得做一次更新,这时候就可以用以下的安全加固方法了。
--1、查询非被锁状态下的用户、过期时间、profile、密码 set lines 400 pagesize 100 select username, profile,account_status,EXPIRY_DATE,password from dba_users where account_status not like '%LOCK%'; select name,password from sys.user$ where name in (select username from dba_users where account_status='OPEN'); select from dba_profiles where RESOURCE_NAME in ('PASSWORD_REUSE_TIME','PASSWORD_REUSE_MAX'); --2、回退安全加固 alter profile default limit PASSWORD_REUSE_MAX unlimited; alter profile default limit PASSWORD_REUSE_TIME unlimited; alter profile MONITORING_PROFILE limit PASSWORD_REUSE_MAX unlimited; alter profile MONITORING_PROFILE limit PASSWORD_REUSE_TIME unlimited; --3、刷新密码(执行以下sql) select 'alter user ' name ' identified by values ''' password ''';' from sys.user$ where name in ( select username from dba_users where account_status not like '%LOCK%'); --4、安全加固 alter profile default limit PASSWORD_REUSE_MAX 5; alter profile default limit PASSWORD_REUSE_TIME 1800; alter profile MONITORING_PROFILE limit PASSWORD_REUSE_MAX 5; alter profile MONITORING_PROFILE limit PASSWORD_REUSE_TIME 1800; --5、检查用户过期日期及安全加固机制 select username, profile,account_status,EXPIRY_DATE,password from dba_users where account_status not like '%LOCK%'; select from dba_profiles where profile='DEFAULT'; |




