作者:GDY1039
考试目标
管理用户
- 创建与管理数据库用户账户
- 创建与管理角色
- 授予与取消特权
- 按用户控制资源使用
Oracle数据库安全
- 应用最少特权原则
- 管理默认用户账户
- 实现标准密码安全特性
- 审计数据库活动
- 注册安全更新
创建与管理用户账户
create user 创建一个新的数据库账户。创建新账户时,必须至少分配一个唯一性用户名和身份骓方法alter user 语句修改一个现有账户或给它分配一个新属性
配置身份验证
连接ORACLE数据库实例归,用户账户必须经过身份验证。身份验证包括证实用户的身份和确认他们拥有使用数据库的特权。Oracle为用户账户提供了3种身份验证方法:密码验证(最常见)、外部验证和全局验证。密码验证
当一个使用该机制的用户连接到数据库时,数据库核实用户名有效并且密码匹配。下例创建一个名为rajesh且使用密码welcome的密码验证式 用户,其中关键字"IDENTIFIED BY password(在本例中password为welcome) "告诉数据库这个用户账户是一个密码验证式账户。
例:CREATE USER rajesh IDENTIFIED BY welcome
外部验证式用户
当一个外部验证式用户试图连接到数据库时,数据库核实用户名是一个有效的数据库账户,并确信操作系统已经完成身份验证。- 外部验证式用户账号不在数据库中存储或验证一个密码
- 所有外部验证式账户必须加上前缀"OPS$"(发音ahps dollar)
- 初始化参数或SPFILE中OS_AUTHENT_PREFIX参数可以修改这个前缀
- 下例创建一个名为oracle的外部验证式用户.其中关键字"IDENTIFIED EXTERNALLY"告诉数据库该用户账户是一个外部验证式账户
- 例:CREATE USER ops$oracle IDENTIFIED EXTERNALLY
- 例:CREATE USER ops$oracle IDENTIFIED EXTERNALLY
- 外部验证账户经常用于管理性脚本,以便密码不必被嵌入在一个人类可理解的脚本中。
全局验证式用户
当有一个外部验证式用户试图连接到数据库时,数据库验证用户名是一个有效的数据库账户,并把连接信息传递给高级安全选项以供验证。高级安全选项支持的身份验证机制包括:生物测定,X.509证 书、Kerberos和RADIUS.- 全局验证式用户账号不在数据库中存储或验证一个密码
- 创建全局验证式账户的语法取决于被 调用的服务,但均使用关键字IDENTIFIED GLOBALLY告诉数据库使用高级安全选项做身份验证。下面是一个例子
- CREATE USER sp_master IDENTIFIED GLOBALLY AS 'CN=sp_master, OU=tier2, O=security, C=US';
分配默认表空间
每个用户均被分配 一个默认表空间。当创建表或索引时没有提供TABLESPACE时,就会使用默认表空间来存储该模式对象。- 如果创建用户时没有明确给该用户分配一个默认表空间,则该用户账户使用数据库的默认表空间。使用ALTER DATABASE语句修改数据库的默认表空间
- 例:ALTER DATABASE DEFAULT TABLESPACE users;
- 使用关键字DEFAULT TABLESPACE tablespace_name来给新建用户分配一个默认表空间
- 例:CREATE USER rajesh IDENTIFIED BY welcome DEFAULT TABLESPACE users;
- 使用命令ALTER USER语句修改用户默认表空间
- 例:ALTER USER rajesh DEFAULT TABLESPACE users;
分配临时表空间
每个用户䨚被分配一个临时表空间,数据库将在这个表空间中在存储临时段。临时段在大型分类操作(比如ORDER BY,GROUP BY,SELECT DISTINCT,MERGE JOIN 或CREATE INDEX)期间被创建。临时表空间必需是类型为TEMPORARY的表空间。- 如果创建用户时没有明确给该用户分配一个临时表空间,则该用户账户使用数据库默认的临时表空间。使用ALTER DATABASE语句修改数据库的默认表空间
- 例:ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
- 使用关键字TEMPORARY TABLESPACE tablespace_name来给新建用户分配一个默认表空间
- 例:CREATE USER rajesh IDENTIFIED BY welcome TEMPORARY TABLESPACE users;
- 使用命令ALTER USER语句修改用户默认表空间
- 例:ALTER USER rajesh TEMPORARY TABLESPACE users;
给用户分配概况
除了默认和临时表空间外,每个用户还被分配一个概况。一个概况有两种用途:首先,它能够限定某些资源的资源使用率;其次,它能实施密码管理规则- 创建用户时分配概况
- 例:CREATE USER jian IDENTIFIED BY "kneehow.ma" DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp PROFILE resource_profile;
- 修修分配给用户的概况
- 例:ALTER USER hamish PROFILE resource_profile
授予与取消特权
特权借助于GRANT语句分配给一个用户或角色,并且可以借助于REVOKE语句取消。ORACLE 10G数据库有3种类型的特权
- 对象特权
- 模式对象上的特权,比如表、视图、序列、过程和包等模式对象。要想使用这些对象,需要该对象上的特权。
- 系统特权
- 数据库级操作上的特权,比如连接到数据库,创建用户、更改数据库或消耗极大数据的表空间等操作。
- 角色特权
- 一个用户作为一个角色所拥有的对象与系统特权。角色是用来管理特权组的工具。
授予对象特权
对象特权使得被授予者可以以特定方式使用另一用户所拥有的模式对象。有些特权只适用于某些模式对象。例如INDEX特权只适用于表,而SELECT特权则适用于表、视图和序列。- 下面这些特权可以被个别授予,被组合在一个列表中授予,或借助关键字ALL被全部授予。
- 在使用ALL关键字时需要特别小心。它可能会隐含地授予威力强大的特权
表对象特权
下面这些特权经常被授予,而且应该完全了解它们。- SELECT
- 允许查询指定表
- INSERT
- 允许在指定表创建新行
- UPDATE
- 允许修改指定表的现有行
- DELETE
- 允许删除指定表的行
- ALTER
- 允许添加、修改或重命名指定表中的列,转移该表到另一个表空间,乃至重命名指定表。
- DEBUG
- 允许被授权者借助于一个调度程序访问指定表上的任意触发器中的PL/SQL代码
- INDEX
- 允许被授权者在指定表上创建新的索引
- REFERENCES
- 允许创建参考指定表的外部键约束
视图对象特权
- SELECT
- 查询指定视图
- INSERT
- 允许在指定视图创建新行
- UPDATE
- 允许修改指定视图的现有行
- DELETE
- 允许删除指定视图的行
- DEBUG
- 允许被授权者借助于一个调度程序访问指定视图上的任意触发器中的PL/SQL代码
- REFERENCES
- 允许创建参考指定视图的外部键约束
序列对象特权
- SELECT
- 允许访问当前值和下一个值(即CURRVAL和NEXTVAL)
- ALTER
- 允许修改指定序列的属性
存储过程、函数、过程、包和JAVA对象特权
- DEBUG
- 允许访问指定程序中所声明的所有公用与私有变量与类型
- 如果对象是包,还允许访问包规范与主体
- 允许在指定程序中放置断点
- EXCUTE
- 允许执行指定程序。
- 如果对象是包,那么表规范中所声明的任意一个程序、变量、类型、油标或记录均允许访问
实例
- 把CUSTOMERS表上的SELECT,INSERT,UPDATE和DELETE特权授予角色SALES_MANAGER
- GRANT SELECT,INSERT,UPDATE,DELETE ON customers TO SALES_MANAGER;
- 如果把特权授予特殊用户PUBLIC,那么特权变成对当前与未来数据库所有用户均可访问。如下例将允许所有用户在CUSTOMERS表上SELECT。
- GRANT SELECT ON customers TO public;
- 参数"WITH GRANT OPTION"允许被授与者继续把得到的对象特权授予其它用户。下例把sales拥有的表customers的SELECT权限授予sales_admin,并且同时允许sales_admin把该特权授予其它用户
- GRANT SELECT ON sales.customers TO sales_admin WITH GRANT OPTION;
- 当通过WITH GRANT OPTION参数获得的特权被取消时,该取消发生级联作用。例如Mary授予Zachary在表client上的select特权,同时Zachary又把该特权授予Rex。当Mary取消Zachary的特权时,Rex的特权也被取消。
- 当用户Mary同时从多个用户获得同一个特权,当其中一个用户的特权被取消时,Mary的特权不会被取消,直至授予Mary授权的所有用户均被取消该特权。
授予系统特权
系统特权允许被授权者执行系统级Data Definition Language语句(如CREATE,ALTER和DROP)或Data Manipulation Language语句。ORACLE 10G有170多种系统特权,所有这些特权被列举在SYSTE_PRIVILEGE_MAP数据目录视图中。读者应该熟悉以下几组特权数据库
- ALTER DATABASE
- 允许ALTER DATABASE语句
- ALTER SYSTEM
- 允许执行ALTER SYSTEM语句
- AUDIT SYSTEM
- 允许执行AUDIT和NOAUDIT语句来完成语句审计
- AUDIT ANY
- 允许执行AUDIT和NOAUDIT语句来完成任意一个模式中对象上的对象审计
调试
- DEBUG CONNECT SESSION
- 允许把当前会话连接到一个调试程序
- DEBUG ANY PROCEDURE
- 允许调试数据库中的所有PL/SQL和JAVA代码。
索引
- CREATE ANY INDEX
- 允许在任意一个模式中创建一个索引
- ALTER ANY INDEX
- 允许更改任意一个模式中的索引
- DROP ANY INDEX
- 允许从任意一个模式中删除索引
- CREATE JOB
- 允许在自己的模式中创建作业、程序或时间表
- CREATE ANY JOB
- 允许在任意一个模式中创建作业、程序或时间表。该特权给被授权者使用其他任意一个用户的凭证来执行程序的能力。请谨慎授予该特权
- EXECUTE ANY PROGRAM
- 允许被授权者把任意一个程序用在自己的模式中的一个作业
- EXECUTE ANY CLASS
- 允许被授权都为他们自己的模式中的作业指定任意一个作业类
- MANAGE SCHEDULER
- 允许创建、修改和删除任意作业类
过程
- CREATE PROCEDURE
- 允许被授权者在他们自己的模式中创建过程。
- CREATE ANY PROCEDURE
- 允许被授权者在任意一个模式中创建过程。
- ALTER ANY PROCEDURE
- 允许被授权者重新编译数据库中的任意一个过程
- DROP ANY PROCEDURE
- 允许从任意一个模式中删除过程
- EXECUTE ANY PROCEDURE
- 允许运行任意一个模式中的任意一个过程
概况
- CREATE PROFILE
- 允许创建概况
- ALTER PROFILE
- 允许被授权者修改现有概况
- DROP PROFILE
- 允许被授权者从数据库中删除概况
角色
- CREATE ROLE
- 允许创建新的角色
- ALTER ANY ROLE
- 允许为数据库中的任意一个角色修改密码
- DROP ANY ROLE
- 允许被授权者从数据库中删除任意一个角色
- GRANT ANY ROLE
- 允许任意角色授给任意用户,或取消任意一个用户或角色的角色。该特权允许分配强有力的管理角色,比如SCHEDULER_ADMIN和IMP_FULL_DATABASE,请谨慎授予该特权
序列
- CREATE SEQUENCE
- 允许被授权者在他们自己的模式中创建新的序列
- CREATE ANY SEQUENCE
- 允许被授权者在任意一个模式中创建新的序列
- ALTER ANY SEQUENCE
- 允许被授权者修改数据库中任意一个序列的属性
- DROP ANY SEQUENCE
- 允许从数据库内的任意一个模式中删除任意一个序列
- SELECT ANY SEQUENCE
- 允许被授权者从任意一个序列中进行选择。
会话
- CREATE SESSION
- 允许被授权者连接到数据库。该特权对用户账户是必需的,但对软件账户可能是不受欢迎的。
- ALTER SESSION
- 允许被授权者执行ALTER SESSIONS语句
- ALTER RESOURCE COST
- 允许被授权者修改ORACLE为一个概况中的资源约束计算资源成本的方式。
- RESTRICTED SESSION
- 允许数据库在RESTRICTED SESSION模式时连接到数据库,一般是为了管理性目的。
同义词
- CREATE SYNONYM
- 允许在自己的对象模式中创建同义词
- CREATE ANY SYNONYM
- 允许在任意对象模式中创建新的同义词
- CREATE PUBLIC SYNONYM
- 允许被授权者创建新的公用同义词。这些同义词对数据库中的所有用户都是可访问的。
- DROP ANY SYNONYM
- 允许从任意对象模式中删除任意一个同义词
- DROP PUBLIC SYNONYM
- 允许被授权者从数据库中删除任意一个公用同义词
表
- CREATE TABLE
- 允许在自己的对象模式中创建表
- CREATE ANY TABLE
- 允许在任意一个对象模式中创建表
- ALTER ANY TABLE
- 允许更改任意一个对象模式中的表
- DROP ANY TABLE
- 允许从任意一个对象模式中删除表
- COMMENT ANY TABLE
- 允许给任意一个对象模式中的任意一个表或列注释
- SELECT ANY TABLE
- 允许查询任意表
- INSERT ANY TABLE
- 允许插入新行到任意表
- UPDATE ANY TABLE
- 允许更新任意表
- DELETE ANY TABLE
- 允许删除任意表中的行
- LOCK ANY TABLE
- 允许执行一条LOCK TABLE来明确锁定任意一个表
- FLASHBACK ANY TABLE
- 允许使用AS OF 语法对任意一个对象模式的任意一个表或视图执行一个SQL回闪查询。
表空间
- CREATE TABLESPACE
- 允许创建新的表空间
- ALTER TABLESPACE
- 允许被授权者更改现有表空间
- DROP TABLESPACE
- 允许删除表空间
- MANAGE TABLESPACE
- 允许更改表空间。例如ONLINE、OFFILE、BEGIN BACKUP或END BACKUP
- UNLIMITED TABLESPACE
- 允许消耗任意一个表空间中的磁盘限额。相当于给指定授权者每个表空间中的无限限额。
触发器
- CREATE TRIGGER
- 允许创建TRIGGER
- CREATE ANY TRIGGER
- 允许在任意一个对象模式中创建TRIGGER
- ALTER ANY TRIGGER
- 允许被授权者在任意对象模式中的表上启用、禁用或编译现有TRIGGER。
- DROP ANY TRIGGER
- 删除任意TRIGGER
- ADMINISTER DATABASE TRIGGER
- 允许创建新的ON DATABASE触发器。使用该特权时必须先拥有CREATE TRIGGER特权。
用户
- CREATE USER
- 允许创建新用户
- ALTER USER
- 允许修改现有用户身份验证方式、密码、分配限额、临时表空间、默认表空间和概况。所有用户默认可修改自己密码。
- DROP USER
- 删除任意用户(连同他们所拥有的对象)
视图
- CREATE VIEW
- 创建新视图
- CREATE ANY VIEW
- 允许在任意一个对象模式中创建新的视图
- DROP ANY VIEW
- 允许删除任意视图
- COMMENT ANY TABLE
- 允许注释任意表、视图或表中的列
- FLASHBACK ANY TABLE
- 允许被授权者使用AS OF 语法对给任意一个对象模式中的任意一个表或视图执行一个SQL回闪查询。
其它对象特权
- ANALYZE ANY
- 对任意表、索引执行一个ANALYZE语句
- GRANT ANY OBJECT PRIVILEGE
- 允许被授权者分配任意一个对象模式 的任意一个表上的对象特权
- GRANT ANY PRIVILEGE
- 允许被授权者给其它用户或角色分配任意一个系统特权。
- GRANT ANY ROLE
- 允许给其他用户或角色分配任意一个角色
- SELECT ANY DICTIONARY
- 允许被授权者从SYS所拥有的数据目录表(比如TAB$或SYSAUTH$)中进行选择
- SYSDBA
- 最有威力的系统特权。它允许被授权者创建、更改、启动或关闭数据库。启用ARCHIVELOG和NOARCHIVELOG模式,恢复一个数据库,以及创建一个SPFILE,此外还拥有数据库必须提供的所有系统特权,其中包括RESTRICTED SESSION。
- SYSOPER
- 威力只比SYSDB特权销弱一点。这个特权允许被授权者启动、关闭、更改、安装、备份和恢复一个数据库。被 授权者能创建或更改一个SPFILE和进入受限会话模式。
实例
- 把CREATE USER、ALTER USER和DROP USER特权授予角色APP_DBA
- GRANT create user, alter user, drop user to appl_dba;
- 把系统特权授予特殊用户PUBLIC,将使得该特权对所有人可用。下例所授予所有人FLASHBACK ANY TABLE特权
- GRANT flashback any table TO public;
- 参数WITH ADMIN OPTION(请注意跟对象特权的区别)使得被授予者可以继续把得到的特权授予其它用户。下例给角色APP_DBA授予INDEX ANY TABLE特权,并同时允许任何一个拥有该角色的的继续把该特权授予其它人。
- GRANT index any table TO appl_dba WITH ADMIN OPTION;
- 当通过WITH ADMIN OPTION参数获得的特权被取消时,取消不会发生级联。Mary把特权select any table授予Zachary,Zachary再把该特权授予Rex。当Mary取消Zachary的特权时,Rex的特权不会被取消
- 由于系统特权的取消不会发生级联,所以当Zachary把特权授予Hex,然后Zachary的被取消,这时Rex从Zachary获得的特权不会被任何影响