用户与安全
数据库模式
模式是一个命名的对象集合。
创建用户,并创建相应的模式。
一个用户只能与一个模式相关联。
用户名和模式通常可以互换使用。
创建用户检查表
- 确定用户必须在其中存储对象的表空间。
- 决定每个表空间的配额。
- 分配默认表空间和临时表空间。
- 创建用户。
- 授予用户权限和角色。
数据库认证
设置初始密码:
CREATE USER aaron
IDENTIFIED BY 口令
DEFAULT TABLESPACE data
TEMPORARY TABLESPACE temp
QUOTA 15M ON data
QUOTA 10M ON users
PASSWORD EXPIRE;
操作系统认证
- OS_AUTHENT_PREFIX初始化参数指定用户名的格式。
- 默认为OPS$。
CREATE USER aaron
IDENTIFIED EXTERNALLY
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE temp
QUOTA 15m ON data;
表空间用户配额
在以下情况下,可以修改用户的表空间配额:
- 用户所拥有的表呈现出意想不到的增长。
- 应用程序得到增强,需要额外的表或索引。
- 对象被重新组织并放置在不同的表空间中。
修改用户的表空间配额,输入如下命令:
ALTER USER aaron
QUOTA O ON USERS;
删除用户
使用DROP命令删除用户。
SROP USER aaron;
类中的所有对象都使用CASCADE子句如果模式包含对象,则使用。
DROP USER aaron CASCADE;
不能删除当前连接到Oracle服务器的用户。
获取用户信息
用户信息可以通过以下视图查询:
- BDA_USERS
- DBA_TS_QUOTAS
管理权限
Oracle用户权限有两种类型:
- System:允许用户在数据库中执行特定的操作
- Object:允许用户访问和操作特定的对象
SYSTEM系统权限
- 超过100个不同的系统特权
- privileges中的ANY关键字表示用户在任何模式中都具有特权。
- GRANT命令用来为一个用户或一组用户添加权限。
- REVOKE命令用于删除权限。
例子
授予系统权限
使用GRANT命令授予系统权限。
被授予者可以通过ADMIN选项进一步授予系统特权。
GRANT CREATE SESSION TO emi;
授权传递性
GRANT CREATE SESSION TO emi WITH ADMIN OPTION;
谁可以授予或撤销?
只有两种类型的用户可以授予其他用户系统权限或撤销这些权限:
- 被授予ADMIN OPTION特定系统权限的用户
- 具有系统权限的用户GRANT ANY PRIVILEGE
因此,只将这些特权授予受信任的用户。
PUBLIC
PUBLIC是数据库中定义的用户组;它不是数据库用户,也不是角色。数据库中的每个用户都属于这个组。因此,如果将权限授予PUBLIC,则数据库的所有用户都可以使用这些权限。
SYSDBA和SYSOPER
系统权限举例
系统权限限制
参数07_DICTIONARY_ACCESSIBILITY:
- 控制对SYSTEM权限的限制
- 如果设置为TRUE,则允许访问sYs模式中的对象
- 默认为FALSE:确保允许访问任何模式的系统特权不允许访问SYS模
撤销系统权限
使用REVOKE命令删除用户的系统权限。
拥有ADMIN OPTION系统权限的用户可以撤销系统权限。
只有通过GRANT命令授予的特权才能被撤销。
REVOKE CREATE TABLE FROM emi;
使用ADMIN OPTION撤销
Some Point
- 要连接到数据库,您需要CREATE SESSION权限。
- 要截断属于另一个模式的表,您需要DROP ANY TABLE特权。
- CREATE ANY PROCEDURE(或EXECUTE ANY PROCEDURE)权限允许用户创建、替换或删除(或执行)过程、包和函数;这包括Java类。
- CREATE TABLE权限使您能够在模式中创建、修改、删除和查询表。
- SELECT、INSERT、UPDATE和DELETE是对象权限,但是SELECT ANY、INSERT ANY、UPDATE ANY和DELETE ANY是系统权限(换句话说,它们不适用于特定对象)。
OBJECT对象特权
授予对象权限
使用GRANT命令授予对象权限。
授予必须在授予者的模式中,或者授予者必须具有Grant OPTION。
GRANT EXECUTE ON dbms_output To jeff;
GRANT UPDATE ON emi.customers To jeff WITH
GRANT OPTION;
撤销对象权限
使用REVOKE命令撤销对象权限。
撤销特权的用户必须是被撤销对象特权的原始授予者。
REVOKE SELECT ON emi.orders FROM jeff;
带有授予选项的撤销
Some Point
- 对象权限可以授予用户、角色或PUBLIC。
- 如果一个视图引用了来自其他用户的表或视图,您必须对视图的基础表具有WITH GRANT OPTION权限,才能将视图上的任何权限授予其他用户。例如,JOHN拥有一个视图,该视图引用了JAMES的一个表。要将视图上的SELECT权限授予另一个用户,JOHN应该在表WITH grant OPTION上获得SELECT权限。
- 在表上接收到的任何对象特权都为被授予者提供了锁定表的特权。
- 不能在列上指定SELECT特权;要授予列级SELECT权限,请创建一个包含所需列的视图,并在视图上授予SELECT权限。
- 您可以指定ALL或ALL PRIVILEGES来授予对象上所有可用的特权(例如,grant ALL on CUSTOMER to JAMES)。
- 即使您拥有DBA权限,要对其他用户拥有的对象授予权限,您也必须对该对象授予具有grant OPTION的适当权限。
- 在一条语句中可以向多个用户和/或角色授予多个权限。例如GRANT INSERT, UPDATE, SELECT ON CUSTOMER TO ADMIN_ROLE, JULIE, SCOTT;
管理角色
预定义的角色
CONNECT 连接数据库、创建集群、数据库链接、序列、同义词、表和视图以及修改会话的特权。
RESOURCE 特权,用于创建集群、表和序列,以及创建可编程对象,如过程、函数、包、索引类型、类型、触发器和操作符。
DBA 所有的系统特权都带有ADMIN选项,所以是系统特权可以授予数据库的其他用户或角色。
SELECT_CATALOG_ROLE 查询字典视图和表的能力。
EXECUTE_CATALOG_ROLE 执行字典包(sys拥有的包)的权限。
DELETE_CATALOG_ROLE 删除或重新创建字典包的能力。
同样,当您运行catproc。SQL脚本作为数据库创建的一部分,脚本执行catexp。Sql,它创建了另外两个角色:
EXP_FULL_DATABASE 使用Export实用程序对数据库进行完整和增量导出的能力。
IMP_FULL_DATABASE 使用Import实用程序执行完整数据库导入的能力。这是一个非常强大的角色。
建立默认角色
- 一个用户可以被分配多个角色。
- 用户可以被分配一个默认角色。
- 限制用户的默认角色数。
ALTER USER scott
DEFAULT ROLE hr_clerk, oe_clerk;
ALTER USER scott DEFAULT ROLE ALL;
ALTER USER SCOt DEFAULT ROLE ALL EXCEPT
hr_clerk;
ALTER USER scott DEFAULT ROLE NONE;
启用和禁用角色
- 禁用角色以暂时撤销用户的角色。
- 允许角色临时授予权限。
- SET ROLE命令用来启用和禁用角色。
- 在登录时为用户启用默认角色。
- 启用角色可能需要密码。
SET ROLE hr_clerk;
SET ROLE oe_clerk IDENTIFIED BY order;
SET ROLE ALL EXCEPT oe_clerk;
从用户撤销角色
从用户中撤销角色需要ADMIN选项或GRANT ANY ROLE权限。
取消一个角色:
REVOKE oe_clerk EROM scott;
REVOKE hr_manager FROM PUBLIC;
删除角色
- 从授予它的所有用户和角色中删除它
- 从数据库中删除它
需要ADMIN选项或DROP ANY ROLE权限
DROP ROLE hr_manager;
应用程序角色
应用程序角色只能通过授权的PLISQL包启用。
USING包子句创建一个应用程序角色。
CREATE ROLE admin_role
IDENTIFIED USING hr.employee;
角色创建指南
默认角色指南
获取角色信息
角色信息可以通过以下视图查询:
- DBA_ROLES:数据库中存在的所有角色
- DBA_ROLE_PRIVS:授予用户和角色的角色
- ROLE_ROL_PRIVS:授予角色的角色
- DBA_SYS_PRIVS:授予用户和角色的系统权限
- ROLE_SYS_PRIVS:角色拥有的系统权限
- ROLE_TAB_PRIVS:赋予角色的对象权限
- SESSION_ROLES:用户当前已启用的角色
审计
audit_trail设置为db,extended或os时与不开启审计日志相比,开启审计日志将多消耗2-3%的cpu
审计是对选定的用户数据库操作的监视,用于:
- 调查可疑的数据库活动
- 收集有关特定数据库活动的信息
审计可以按会话或访问执行
审计的类型
Standard auditing. 对SQL语句、特权、模式、对象、网络和多层活动使用标准审计。标准审计记录被写入以下位置之一:
- SYS.AUD$ system table. 您可以通过查询DBA_AUDIT_TRAIL数据字典视图或DBA_COMMON_AUDIT TRAIL视图来查看该表的内容,DBA_COMMON_AUDIT TRAIL视图结合了标准和细粒度的审计日志记录。
- Operating system files. 除了用操作系统文件格式编写审计跟踪外,还可以用XML格式编写。
要控制如何编写标准审计跟踪记录,可以设置AUDIT_TRAIL初始化参数。
Fine-grained auditing. 使用细粒度审计来监视特定的活动,例如数据库表上的操作或活动发生的时间。细粒度的审计记录被写入SYS。FGA_LOG$ system表。要查看该表的内容,可以查询DBA_FGA_AUDIT_TRAIL数据字典视图或DBA_ COMMON_AUDIT_TRAIL视图。
要控制如何编写细粒度审计跟踪记录,可以在DBMS_FGA中设置audit_trail参数。ADD_POLICY过程。audit_trail参数将记录写入FGA_LOG$系统表或XML操作系统文件。
Administrator auditing. 在UNIX系统上,可以通过syslog审计跟踪来监视系统管理员(用户SYS,以及具有sYSDBA或SYSOPER权限的连接用户)的活动。Syslog是另一种目的审计跟踪,类似于操作系统文件、XML格式文件和数据库表。在Windows上,这些活动与其他类型的活动一起记录在Windows事件日志中。
对于UNIX和Windows,要控制管理员审计文件的写入方式,可以设置以下初始化参数:
- AUDIT_SYS_OPERATIONS参数。启用或禁用管理员审计。将其设置为TRUE将系统管理员活动记录在包含审计跟踪的操作系统文件中。
- AUDIT_SYSLOG_LEVEL参数。当AUDIT_TRAIL参数设置为oS时,通过syslog实用程序将SYS和标准操作系统审计记录写入系统审计日志。
审计准则
定义要审核的内容:
- 用户、语句或对象
- 语句执行
- 语句执行成功或不成功
管理您的审计跟踪:
- 监视审计跟踪的增长
- 保护审计跟踪免受未经授权的访问
审计类别
默认审计:
- 实例启动和实例关闭
- 管理员权限
数据库审计:
- 由DBA启用
- 不能记录列值
基于值的或应用程序审计:
- 通过代码实现
- 可以记录列值
- 用于跟踪对表的更改
数据库审计
审计选项
标准审计(Standard Auditing)
声明审计:
AUDIT TABLE;
特权审计:
AUDIT create any trigger;
模式对象审计:
AUDIT SELECT ON emi.orders;
Fine-grained auditing
- 提供基于内容的数据访问监控
- 是否使用DBMS_FGA包实现
审计用户SYS
审计用户SYS提供:
- 额外的安全级别
- 将AUDIT_SYS_OPERATIONS设置为True
不审计用户SYS:
- 将AUDIT_SYS_OPERATIONS设置为False
- 这是默认值。
获取审计信息
可以通过查询以下视图获取审计信息:
- ALL_DEF_AUDIT_OPTS
- DBA_STMT_AUDIT_OPTS
- DBA_PRIV_AUDIT_OPTS
- DBA_OBJ_AUDIT_OPTS
获取审计记录通知
查询如下视图查看审计记录信息:
- DBA_AUDIT_TRAIL
- DBA_AUDIT_EXISTS
- DBA_AUDIT_OBJECT
- DBA_AUDIT_SESSION
- DBA_AUDIT_STATEMENT