【Oracle学习16】 Oracle安全性
用户和模式(schema)相关,但并不相同。
- 用户指通过某个用户账户名建立实例的会话的个人。
- 用户账户定义初始访问权限及会话属性。
- 模式是用户账户所拥用的一组对象。创建一个用户,实际上也创建了一个同名的schema,其包含此账户下的对象。
16.1 创建和管理数据库用户账户
用户账户:
--创建表空间
create tablespace example datafile '/u01/app/oracle/oradata/orcl/example.dbf' size 50m;
select name from v$datafile;
select file_id,file_name,tablespace_name,autoextensible from dba_data_files;
select tablespace_name,block_size,status,contents,logging from dba_tablespaces;
select * from dba_tablespaces where tablespace_name like 'EXAMPLE%';
--创建用户
alter profile default limit PASSWORD_VERIFY_FUNCTION null;
create user OCP IDENTIFIED by oracle default tablespace EXAMPLE PROFILE default QUOTA 10M on EXAMPLE;
alter user OCP QUOTA UNLIMITED ON EXAMPLE;
grant unlimited tablespace to OCP;
--revoke unlimited tablespace from OCP:
--Profile
select * from dba_users where username='HR';
16.1.1 用户账户属性
- 用户名:
- 身份验证方法:
- 默认表空间:
- 表空间配额:
- 临时表空间:
- 用户配置文件:
- 账户状态:
1.用户名
用户名字母开头,不能为关键字,会自动转为大写。 除非使用了双引号括起来。
create user join identified by pwd123; --User JOIN 已创建。
create user "join" identified by pwd123; --User "join" 已创建。
SQL>select username,created from dba_users where lower(username) like 'join%';
USERNAME CREATED
-------------------
join 2020-02-05 13:19:01
JOIN 2020-02-05 13:18:55
2)默认表空间
- 创建用户时若没有指定表空间,则使用默认表空间。如建库时没有指定默认表空间,则会使用system的设置(USERS)为默认表空间。
- 大多数据用户不需要任何配额(quota),因为他们不创建对象。
- 创建段,用户必须有create table 权限,并且有表空间的配额。
#创建表空间
create tablespace example datafile '/u01/app/oracle/oradata/orcl/example.dbf' size 50m;
select file_id,file_name,tablespace_name,autoextensible from dba_data_files;
select * from dba_tablespaces where tablespace_name like 'EXAMPLE%';
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/system01.dbf
..
##
SQL> select tablespace_name,block_size,status,contents,logging from dba_tablespaces;
TABLESPACE_NAME BLOCK_SIZE STATUS CONTENTS LOGGING
------------------------------------------------------------ ---------- ------------------ ------------------------------------------ ------------------
SYSTEM 8192 ONLINE PERMANENT LOGGING
SYSAUX 8192 ONLINE PERMANENT LOGGING
UNDOTBS1 8192 ONLINE UNDO LOGGING
TEMP 8192 ONLINE TEMPORARY NOLOGGING
USERS 8192 ONLINE PERMANENT LOGGING
MYTEST 8192 ONLINE PERMANENT LOGGING
JINLIAN_UNDO 8192 ONLINE UNDO LOGGING
#alter database default tablespace tablespace_name;
SQL> select username,created,default_tablespace,temporary_tablespace from dba_users where username = 'JOIN';
USERNAME CREATED DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------- ------------------------------------------------------------ ------------------------
JOIN 2020-02-05 13:18:55 USERS TEMP
配额(Quota):
![配额(Quota)(https://upload-images.jianshu.io/upload_images/19417344-6965857a386f6ce5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
alter user join quota 100m on users;
alter user join quota unlimited on MYTEST;
alter user join quota unlimited on TEMP; -- error,User tried to grant quota on an undo or temporary tablespace
SQL>select tablespace_name,bytes,max_bytes from dba_ts_quotas where username = 'JOIN';
TABLESPACE_NAME BYTES MAX_BYTES
------------------------------------------------------------ ---------- ----------
USERS 0 104857600
MYTEST 0 -1
#
select property_name,property_value from database_properties where property_name like '%TABLESAPCE%';
3)临时表空间
- 永久对象(如表)存储在永久表空间,而临时对象存储在临时表空间.
- 不需要给用户授予临时表空间配额。因为临时表空间中对象并不归用户真正拥有,而是属于SYS用户。
alter user join quota unlimited on TEMP; -- error,User tried to grant quota on an undo or temporary tablespace
#更改用户的临时表空间
alter user JOIN TEMPORARY TABLESPACE TEMP;
4)账户状态
- 打开(OPEN): 账户正常可使用。
- 锁定(LOCKED):
- 过期(EXPIRED):
- 正常过期(EXPIRED (GRACE)):
- 超时锁定(LOCKED (TIMED)): 可以将账户设置为错误多次后自动锁定。
ALERT USER username ACCOUNT LOCK;
ALTER USER username ACCOUNT UNLOCK;
#强制用户下次登录时更改口令
ALTER USER username PASSWORD EXPIRE;
16.1.2 身份验证方法
可以有如下验证方法:
- 操作系统身份验证:
- 口令文件身份验证:
- 口令身份验证:
- 外部身份验证:
- 全局身份验证: 需要使用LDAP目录服务器,Oracle Internet DIrectory。
说明: 所有用户会话都要身份验证,并不存在"匿名登录"。但用户 ANONYMOUS是Oracle Application Express (APEX)应用程序使用的账户。
1.操作系统及口令文件身份验证
- 只能是管理员使用。
- 口令文件验证: connect username/pwd @db as [SYSOPER|SYSDBA];
- 操作系统身份验证: connect / as [SYSOPER|SYSDBA]; oracle并不存操作系统密码。
GRANT [SYSDBA|SYSOPER|SYSASM|SYSBACKUP|SYSDG|SYSKM] TO username;
#查看SYSDBA/SYSOPER权限的人
SQL> select username,sysdba,sysoper,sysasm,sysbackup,sysdg,syskm,account_status from v$pwfile_users;
USERNAME SYSDBA SYSOPER SYSASM SYSBACKUP SYSDG SYSKM ACCOUNT_STATUS
---------- ---------- ---------- ---------- ---------- ---------- -------------------------
SYS TRUE TRUE FALSE FALSE FALSE FALSE OPEN
SYSDG FALSE FALSE FALSE FALSE TRUE FALSE OPEN
SYSBACKUP FALSE FALSE FALSE TRUE FALSE FALSE OPEN
SYSKM FALSE FALSE FALSE FALSE FALSE TRUE OPEN
2.口令身份验证
CONNECT username /password [@db_alias];
alter user username IDENTIFIED By password;
3.外部身份验证
- 若是用外部身份创建用户,oracle会将验证委托给外部服务。如kerberos;
- 若没有启用Advanced Security,则唯一可用的外部验证,即是OS验证。
SQL> select name,value from v$parameter where name = 'os_authent_prefix';
NAME VALUE
------------------------------------------------------------
os_authent_prefix ops$
#创建操作系统用户可登录oracle,如已有OS用户teachertao
SQL> create user ops$teachertao identified externally;
User created.
SQL> grant create session to ops$teachertao;
Grant succeeded.
sqlplus /
16.1.3 创建账户
创建账户:
SQL> create profile developer_profile limit // developer_profile为资源文件名
FAILED_LOGIN_ATTEMPTS 3 //指定锁定用户的登录失败次数
PASSWORD_LOCK_TIME 5 //指定用户被锁定天数
PASSWORD_LIFE_TIME 30 //指定口令可用天数
#
create user alois identified by alois default tablespace users;
create user teachertao identified by teachertao
default tablespace users temporary tablespace temp
quota 100m on users
profile developer_profile
password expire
account unlock;
#修改profile
alter user alois profile default;
#解锁
alter user alois account unlock; --status将为open
select username,account_status from dba_users where username = 'ALOIS';
#修改密码
alter user alois identified by oracle;
##
drop user teachertao; --模式为空时才成功
drop user teachertao cascade; --即使用户有角色也删除
16.2 授予和撤消权限
- 默认方式,非授权用户不能做oracle任何操作,甚至不能成功连接。
- 权限分类: 系统权限及对象权限。
- 系统权限的撤消不级联,对象权限的撤消级联。
权限分为两组:
- 系统权限:用户可执行影响数据字典的操作。如创建表、创建索引、连接实例等
- 对象权限: 用户执行影响数据的操作。 如读取视图,可更新某些列、执行存储过程等
#新建用户不能做任何操作
SQL> conn teachertao/teachertao
ERROR:
ORA-01045: user TEACHERTAO lacks CREATE SESSION privilege; logon denied
16.2.1 系统权限
常用的系统权限:
CREATE SESSION 创建会话
CREATE SEQUENCE 创建序列
CREATE SYNONYM 创建同名对象
CREATE TABLE 在用户模式中创建表
CREATE ANY TABLE 在任何模式中创建表
ALERT DATABASE 允许修改物理结构
DROP TABLE 在用户模式中删除表
DROP ANY TABLE 在任何模式中删除表
CREATE PROCEDURE 创建存储过程
EXECUTE ANY PROCEDURE 执行任何模式的存储过程
CREATE USER 创建用户
DROP USER 删除用户
CREATE VIEW 创建视图
SQL> select count(*) from system_privilege_map;
COUNT(*)
----------
256
SQL> grant create session,alter session, create table , create view,create synonym,create cluster,create database link, create sequence,
create trigger,create type,create procedure ,create operator to teachertao;
#
SELECT grantee,privilege,admin_option FROM dba_sys_privs WHERE grantee IN ( 'TEACHERTAO' ) order by grantee;
#with admin option有授权的权限,并且撤消不会级联。
SQL> grant create table to teachertao with admin option; --teachertao有授权的权限
Grant succeeded.
SQL> conn teachertao/teachertao
Connected.
grant create table to join;
grant select any table to JOIN; --除SYS模式中的表之外
SELECT grantee,privilege,admin_option FROM dba_sys_privs WHERE grantee IN ( 'TEACHERTAO','JOIN' ) order by grantee;
#回收系统权限
REVOKE {privilege | role} FROM {user_name | role_name | PUBLIC}
16.2.2 对象权限
对象权限允许对表和对象执行 ;
- SELECT,INSERT,UPDATE,DELETE,ALERT,EXECUTE权限。
- all包括所有权限
语法:
GRANT PRIVILEGE on schema.obj TO username WITH GRANT OPTION;
select, update, insert, alter, index, delete, all //all包括所有权限
grant select on hr.employees to teachertao;
grant update (salary ) on hr.employees to teachertao; --对列授权
grant all on regions to scott; -- 授权 hr.regions 全部对象权限给scott;
#
revoke delete on hr.regions from scott;
测试:
#创建用户
create user alois identified by alois default tablespace users;
create user anja identified by oracle;
create user alois identified by alois;
grant create session to alois;
SQL> create table t1 (c1 number);
ORA-01031: insufficient privileges
grant create table to alois;
#再试
SQL> create table t1 (c1 date);
Table created.
SQL> drop table t1; --能建就可以DROP ??
Table dropped.
SQL> create table t1 (c1 date) segment creation immediate; --error
ORA-01950: no privileges on tablespace 'USERS'
SQL> alter user alois quota 10m on USERS; --增加quota,SYSDBA
SQL> create table t1 (c1 date) segment creation immediate;
Table created.
SQL> grant select on t1 to anja;
##
SQL> select grantee,privilege,grantor,grantable,table_name from dba_tab_privs where owner='ALOIS' and table_name='T1';
GRANTEE PRIVILEGE GRANTOR GRANTABLE TABLE_NAME
-----------------------------------------------------------
ANJA SELECT ALOIS NO T1
SQL> select * from dba_sys_privs where grantee='ALOIS';
GRANTEE PRIVILEGE ADMIN_ COMMON INHERI
-----------------------------------------------------------
ALOIS CREATE TABLE NO NO NO
ALOIS CREATE SESSION NO NO NO
16.3 创建和管理角色
角色:
- 是一组系统权限或对象权限,可以作为一个单元来授予或撤消,可以在会话中临时激活或禁用已授予的权限。若将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。
- 角色不是模式对象,不属于任何人,和用户名同一个命名空间,故不能和用户同名。
- 角色也可以带有口令。
16.3.1 创建角色并授予角色权限
- DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
- RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
- CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。
示例:
语法: CREATE ROLE secure_application_role
IDENTIFIED USING <security_procedure_name>;
#
sql>select * from role_sys_privs where role='DBA';
create role hr_junior;
create role hr_senior;
create role hr_manager;
create role hr_role identified by oracle; --角色也可以带有密码
create role hr_role identified by oracle;
grant create table to hr_role;
grant select table to hr_role; --无select table 权限
grant connect to hr_role;
#
SQL> grant create on hr.employees to hr_junior; --error
ORA-02224: EXECUTE privilege not allowed for tables
#
grant select on hr.employees to hr_junior;
grant hr_junior to hr_senior with admin option ; --ok
grant hr_junior to hr_senior with grant option; --error,only the ADMIN OPTION can be specified
grant insert,update,delete on hr.employees to hr_senior;
grant hr_senior to hr_manager;
grant all on hr.employees to hr_manager;
16.3.2 预定义的角色
常见的角色:
- 1.CONNECT, RESOURCE, DBA
这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。 - 2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
这些角色主要用于访问数据字典视图和包。 - 3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
这两个角色用于数据导入导出工具的使用。 - 4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。这两个角色用于oracle高级查询功能。 - 5. SNMPAGENT
用于oracle enterprise manager和Intelligent Agent - 6.RECOVERY_CATALOG_OWNER
用于创建拥有恢复库的用户。关于恢复库的信息,参考oracle文档《Oracle9i User-Managed Backup and Recovery Guide》 - 7.HS_ADMIN_ROLE
A DBA using Oracle’s heterogeneous services feature needs this role to access appropriate tables in the data dictionary.
-8. PUBLIC : 此角色始终授予每个数据库用户账户。grant select on hr.regions to public ;所有用户都将有此select 权限。
说明:
角色管理:
#查询用户拥有哪些权限:
SQL> select * from dba_role_privs;
SQL> select * from dba_sys_privs;
SQL> select * from role_sys_privs;
1.建一个角色
sql>create role role1;
2.授权给角色
sql>grant create any table,create procedure to role1;
3.授予角色给用户
sql>grant role1 to user1;
4.查看角色所包含的权限
sql>select * from role_sys_privs;
5.创建带有口令以角色(在生效带有口令的角色时必须提供口令)
sql>create role role1 identified by password1;
6.修改角色:是否需要口令
sql>alter role role1 not identified;
sql>alter role role1 identified by password1;
7.设置当前用户要生效的角色
(注:角色的生效是一个什么概念呢?假设用户a有b1,b2,b3三个角色,那么如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;在用户登录后,oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。)
sql>set role role1;//使role1生效
sql>set role role,role2;//使role1,role2生效
sql>set role role1 identified by password1;//使用带有口令的role1生效
sql>set role all;//使用该用户的所有角色生效
sql>set role none;//设置所有角色失效
sql>set role all except role1;//除role1外的该用户的所有其它角色生效。
sql>select * from SESSION_ROLES;//查看当前用户的生效的角色。
8.修改指定用户,设置其默认角色
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;
详见oracle参考文档
9.删除角色
sql>drop role role1;
角色删除后,原来拥用该角色的用户就不再拥有该角色了,相应的权限也就没有了。
说明:
1)无法使用WITH GRANT OPTION为角色授予对象权限。
2)可以使用WITH ADMIN OPTION 为角色授予系统权限,取消时不是级联。
16.3.3 启用角色
在用户登录后,oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。这有一定安全风险,可以通过将角色设置为非默认来修改此行为。
create user JOIN identified by JOIN;
grant hr_senior to JOIN ;
SQL> select * from dba_role_privs where grantee = 'JOIN';
GRANTEE GRANTED_ROLE ADMIN_ DELEGA DEFAUL COMMON INHERI
-----------------------------------------------------------
JOIN HR_SENIOR NO NO YES NO NO
#
alter user JOIN default role none;
grant connect to JOIN;
alter user JOIN default role connect;
select * from dba_role_privs where grantee = 'JOIN'; --sysdba
SQL> conn JOIN/JOIN
Connected.
SQL> set ROLE hr_senior ;
Role set.
16.3.4 权限分析
重要视图:
- dba_used_privs
- dba_unused_privs
示例:
create role usr_role;
create role mgr_role;
-- 给角色授权
grant create session to usr_role;
grant select on alois.t1 to usr_role;
grant usr_role to mgr_role with admin option;
grant all on alois.t1 to mgr_role;
-- 创建用户
create user afra identified by oracle default tablespace USER quota 10m on USER;
create user anja identified by oracle;
--
grant mgr_role to AFRA; --sysdba
conn afra/oracle;
grant usr_role to anja;
insert into alois.t1 values(sysdate);
commit;
#ANJA可以访问alois.t1;
SQL> conn anJA/oracle -- 用户名会自动变为大写ANJA,密码会区分大小写。
select * from alois.t1;
SQL> insert into alois.t1 values(sysdate);
ORA-01031: insufficient privileges
# 查看
SQL>select * from dba_role_privs where granted_role in ('USR_ROLE','MGR_ROLE');
SQL>select grantee,owner,table_name,grantor,privilege,grantable,type from dba_tab_privs where grantee in ('USR_ROLE');
SQL>select * from dba_sys_privs where grantee in ('USR_ROLE');
16.4 创建和管理配置文件
- 配置文件(profile)可以实施口令策略。
- 每个用户都有profile,默认是Default Profile ,其包括sys和system。
- 用户一次只分配一个profile。
- Pofile作用: 控制资源消费情况, 管理账号状态及密码过期。
SQL> create profile developer_profile limit // developer_profile为资源文件名
FAILED_LOGIN_ATTEMPTS 3 //指定锁定用户的登录失败次数
PASSWORD_LOCK_TIME 5 //指定用户被锁定天数
PASSWORD_LIFE_TIME 30 //指定口令可用天数
#
create user alois identified by alois profile developer_profile;
SQL>select username,profile from dba_users;
alter user alois profile developer_profile;
16.4.1 口令配置文件的限制
select username,profile from dba_users;
USERNAME PROFILE
------------------------------------------------------
SYS DEFAULT
SYSTEM DEFAULT
SYSBACKUP DEFAULT
...
16.4.2 创建和分配配置文件
utlpwdmg.sql 脚本会创建一组函数,来提供各种程度的密码复杂性检查。
#查看脚本
cat $ORACLE_HOME/rdbms/admin/utlpwdmg.sql
#
@/u01/app/oracle/product/12.2.0/db_1/rdbms/admin/utlpwdmg.sql
describe sys.oral2c_verify_function;
##关闭复杂密码认证
alter profile default limit PASSWORD_VERIFY_FUNCTION null;
select * from dba_profiles where resource_name = 'PASSWORD_VERIFY_FUNCTION';
#建立profile 出错2次,锁定10分钟
create profile two_wrong limit failed_login_attempts 2 password_lock_time 10/1440;
#修改用户profile
alter user alois profile two_wrong;
SQL> conn alois/cc; --错误>=2次被锁
ERROR:
ORA-28000: the account is locked
#
SQL> select username,account_status,lock_date,expiry_date,default_tablespace from dba_users where username = 'ALOIS';
USERNAME ACCOUNT_STATUS LOCK_DATE EXPIRY_DATE DEFAULT_TABLESPACE
----------------------------------------------------------------------------------------------------------------------
ALOIS LOCKED(TIMED) 2020-02-06 14:16:41 2020-08-03 21:28:36 USERS
#解锁
alter user alois account unlock; --status将为open
SQL> select username,account_status from dba_users where username = 'ALOIS';
#修改密码
alter user alois identified by oracle;
select * from dba_profiles ;
drop profile TWO_WRONG ; --error ;has users assigned, cannot drop without CASCADE
drop profile TWO_WRONG cascade ;
select username,account_status,profile from dba_users where username = 'ALOIS'; --profile变为default
drop user ALOIS cascade;
drop user anja;
16.5 DBA对安全和审核的责任
16.5.1 审核的原因
16.5.2 审核技术
- Audit Vault :
- 标准数据库审核: AUDIT_TRAIL设置为DB;信息写入SYS.AUD$中。
- 细粒度审核(Fine Grained Auditing, FGA):可跟踪某些行或列的访问。
- 基于值的审核:
- 统一审核:
- 强制审核: 无论是否配置,都会有的审核操作。如create /drop prolicy,SYSDBA/SYSOPER等管理者的一些操作。
16.6 启用标准数据库审核和统一审核
16.6.1 启用标准审核
SQL> select name,value from v$parameter where name like 'audit%';
NAME VALUE
----------------------------------------------------
audit_sys_operations TRUE
audit_file_dest /u01/app/oracle/admin/orcl/adump
audit_syslog_level (null)
audit_trail DB
audit all statements by HR;
audit select ,insert,update ,delete on hr.employees;
16.6.2 启用统一审核
**开启统一审核: **
#检查是否开启
SQL> select parameter,value from v$option where parameter='Unified Auditing';
PARAMETER VALUE
--------------------------------------------------------------
Unified Auditing FALSE
#linux环境
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME
结果:
...
mv /u01/app/oracle/product/12.2.0/db_1/rdbms/lib/oracle /u01/app/oracle/product/12.2.0/db_1/bin/oracle
chmod 6751 /u01/app/oracle/product/12.2.0/db_1/bin/oracle
#重启侦听器和数据库实例
alter system checkpoint;
alter system archive log current;
shutdown normal;
lsnrctl stop ;lsnrctl start
SQL> startup
##
SQL> select parameter,value from v$option where parameter='Unified Auditing';
PARAMETER VALUE
--------------------------------------------------------------
Unified Auditing TRUE
创建策略:
create audit policy privpol privileges select any table,create trigger;
create audit policy actpol actions drop table,alter trigger;
create audit policy rolepol roles dba;
create audit policy mixedpol privileges select any table,create trigger actions drop table,alter trigger roles dba;
#仅用于某个表
create audit policy emppol actions insert,update,delete on scott.emp;
启用策略:
SQL> audit policy privpol; --全部启用
Audit succeeded.
audit policy privpol;
audit policy actpol whenever successful; --成功时记录
audit policy rolepol by scott,system; --为scott,system用户启用
audit policy mixedpol whenever not successful; --不成功时记录
noaudit policy actpol; --禁用此policy
#当前SGA记录转存到数据库审核记录中。
exec dbms_audit_mgmt.flush_unified_audit_trail;
示例:
audit policy ora_account_mgmt;
create audit policy aud_dba_role roles dba;
audit policy aud_dba_role by system;
select policy_name,enabled_opt,user_name from audit_unified_enabled_policies;
#
create user x identified by y#1234567;
alter system set open_cursors=300 scope=memory;
#查询审核记录
exec dbms_audit_mgmt.flush_unified_audit_trail;
select dbusername,sql_text from unified_audit_trail;
#尝试修改审核记录
SQL> select table_name from dba_tables where owner='AUDSYS';
TABLE_NAME
--------------------------------------------------------------------------------
AUD$UNIFIED
SQL> delete from audsys.'&table_name'; --会出错
Enter value for table_name: AUD$UNIFIED
delete from audsys.'AUD$UNIFIED'
ORA-00903: invalid table name
SQL> truncate table audsys.'&table_name'; --会出错
Enter value for table_name: AUD$UNIFIED
truncate table audsys.'AUD$UNIFIED'
ORA-00903: invalid table name
##清除审核记录
select count(*) from unified_audit_trail;
execute dbms_audit_mgmt.clean_audit_trial(dbms_audit_mgmt.audit_trail_all,false);
select count(*) from unified_audit_trail;
16.7 总结
16.8 测试
角色:
create role hr_role identified by oracle; --角色也可以带有密码
create role hr_role identified by oracle;
grant create table to hr_role;
grant select table to hr_role; --无select table 权限
grant connect to hr_role;