常见异常:
ORA-14025:不能为实体化视图或实体化视图日志指定PARTITION
ORA-14026:PARTITION和CLUSTER子句互相排斥
ORA-14027:仅可以指定一个PARTITION子句
ORA-14028:缺少AT或VALUES关键字
ORA-14029:GLOBAL分区索引必须加上前缀
ORA-14030:CREATETABLE语句中有不存在的分区列
ORA-14031:分区列的类型不可以是LONG或LONGRAW
ORA-14032:分区编号的分区界限过高
ORA-14033:ctchvl:未预期的strdef类型
ORA-14034:ctchvl:未预期的操作数类型
ORA-14035:ctchvl:未预期的字符串数据类型
ORA-14036:列的分区界限值过大
ORA-14037:分区""的分区界限过高
ORA-14038:GLOBAL分区索引必须加上前缀
ORA-14039:分区列必须构成UNIQUE索引的关键字列子集
ORA-14040:传递给TABLE$OR$INDEX$PART$NUM的参数个数不当
ORA-14041:可能没有为结果分区指定分区界限
ORA-14042:可能没有为要移动,修改或重建的分区指定分区界限
ORA-14043:仅可以添加一个分区
ORA-14044:仅可以移动一个分区
ORA-14045:仅可以修改一个分区
ORA-14046:分区可以刚好分成两个新的分区
ORA-14047:ALTERTABLE|INDEXRENAME不可以与其它分区组合
ORA-14048:分区维护操作不可以与其它操作组合
ORA-14049:无效的ALTERTABLEMODIFYPARTITION选项
ORA-14050:无效的ALTERINDEXMODIFYPARTITION选项
ORA-14051:ALTERMATERIALIZEDVIEW选项无效
ORA-14052:此上下文中不允许分区扩展表名称语法
ORA-14053:非法尝试修改(在语句中)
ORA-14054:无效的ALTERTABLETRUNCATEPARTITION选项
ORA-14055:ALTERINDEXREBUILD中的关键字REBUILD必须紧跟索引名称
ORA-14056:分区编号:PCTUSED和PCTFREE的总和不可以超过100
ORA-14057:分区"":PCTUSED和PCTFREE的总和不可以超过100
ORA-14058:分区编号:INITRANS值必须小于MAXTRANS值
ORA-14059:分区"":INITRANS值必须小于MAXTRANS值
ORA-14060:不可以更改表分区列的数据类型或长度
ORA-14061:不可以更改索引分区列的数据类型或长度
ORA-14062:一个或多个表分区驻留在只读表空间中
ORA-14063:唯一/主约束条件关键字中存在无用索引
ORA-14064:唯一/主约束条件关键字中存在无用分区的索引
ORA-14065:不可以指定分区表的ALLOCATESTORAGE
ORA-14066:按索引组织的未分区表的选项非法
ORA-14067:重复的TABLESPACE_NUMBER说明
ORA-14068:不可以同时指定TABLESPACE和TABLESPACE_NUMBER
ORA-14069:无效的TABLESPACE_NUMBER值
ORA-14070:仅可以指定分区索引或包含REBUILD的选项
ORA-14071:用于强制约束条件的索引选项无效
ORA-14072:不可以截断固定表
ORA-14073:不可以截断引导程序表或群集
ORA-14074:分区界限必须调整为高于最后一个分区界限
ORA-14075:分区维护操作仅可以对分区索引执行
ORA-14076:DROP/SPLITPARTITION不可以应用到LOCAL索引分区
ORA-14078:您不可以删除GLOBAL索引的最高分区
ORA-14079:标记为无用索引的分区选项非法
ORA-14080:无法按指定的上限来分割分区
ORA-14081:新分区名必须与旧分区名不同
ORA-14082:新分区名必须与对象的任何其它分区名不同
ORA-14083:无法删除分区表的唯一分区
ORA-14084:您仅可以指定LOCAL索引的TABLESPACEDEFAULT
ORA-14085:分区表不能具有LONG数据类型的列
ORA-14086:不可以将区索引作为整体重建
一般权限用户的登录验证都是第三种方式,即数据库验证,因为用户名和密码都是存储在数据库当中的。然而,SYS用户(具有SYSDBA和SYSOPER权限的用户)却不是数据库验证。在oracle数据没有启动的时候,SYS用户就可以连接到数据库,并对其进行启动等操作,所以不可能是数据库验证。SYS用户采用的是第一种和第二种验证方式。
1 sqlplus /nolog,conn /as sysdba 之所以能够登录,在于oracle登录时的身份认证方式。可以试一下这个:sqlplus /nolog,conn abcd/sss as sysdba,你发现也能够登录成功。2 oracle在登录时,有三种身份认证方式:操作系统身份认证、密码文件认证、数据库认证。而conn /as sysdba是属于操作系统认证。 为什么这样说呢?你当前电脑开机时登录的用户,也就是进入操作系统的用户,例如是gooooal,它在你电脑的ora_dba组中。可以在我的电脑单击右键,找到管理,选择本地用户和组,发现有一个组叫ora_dba,双击它,看到成员列表中有gooooal。 也就是在conn /as sysdba,oracle会进行操作系统验证,发现你当前登录的用户就属于ora_dba组,因此才可以登录成功。 你可以把ora_dba组中的gooooal用户删除,再conn /as sysdba,就发现进不去了。3 密码文件验证可以查阅相关资料,百度oracle的身份验证方式,就可以查到相关资料。4 其实在linux或unix环境下,安装oracle是要设置很多东西的,比如用户和用户组的设置等,不像在windows下,安装傻瓜化了。5 关于安全性,如果将oracle安装在本地,其实你本地就是oracle服务器,所以权限高一些。你用哪个用户来启动oracle实例?哪个用户来mount数据库?哪个用户来打开数据库?从而才能进行之后的select等sql操作? 在oracle实例等还没有启动的时候,oracle数据库里面建的用户肯定是不能使用的。所以才会有操作系统身份验证。用这个用户,来启动oracle实例、转载数据库等。之后才能做oracle表的增删改查。
3.2 Sql*Plus
3.2.1 Windows操作系统
3.2.1.1 连接数据库
3.2.1.2 断开数据库
3.2.2 Linux操作系统
3.2.2.1 连接数据库
连接远程数据库:
1) 输入Shell命令:sqlplus 用户名/密码@连接描述符。例如:sqlplus test/test@orcl,表示使用test用户名和test密码通过orcl连接描述符连接数据库。
2) 操作系统会自动根据$PATH环境变量去运行$ORACLE_HOME/bin/sqlplus可执行文件。如果$PATH环境变量或$ORACLE_HOME环境变量不对,会导致无法执行sqlplus命令。
3) sqlplus会自动去找$ORACLE_HOME/network/admin/tnsnames.ora文件里配置的连接描述符。
4) sqlplus会自动使用指定的用户名、密码和连接描述符连接远程数据库,连接成功后会出现SQL命令的交互界面SQL。
注意:如果连接失败,检查远程的数据库是否已经启动,远程的监听服务是否已经启动,连接描述符配置文件tnsnames.ora是否有读取权限,连接描述符是否配置正确,用户名和密码是否正确,密码是否过期,用户是否具有connect权限等。
连接本机数据库:
1) 在命令行下输入:sqlplus / as sysdba
2) 操作系统会自动根据$PATH环境变量去运行$ORACLE_HOME/bin/sqlplus可执行文件。
3) 连接成功后会出现SQL 交互界面。
提示:本机数据库可以在关闭状态下用此方法连接,但如果用连接远程数据库的方法来连接本机数据库,要求数据库必须已经启动。
3.2.2.2 断开数据库
输入SQL命令:exit或quit,表示断开并退出sqlplus。
输入SQL命令:disconnect,表示只断开、但不退出sqlplus。
3.3 OEM
3.3.1 连接数据库
用浏览器打开OEM的URL地址,输入数据库用户名和密码,点击登录即可完成连接。
查看OEM的URL地址:查看$ORACLE_HOMEinstall下的readme.txt
3.3.2 断开数据库
点击网页的右上角的注销按钮,即可断开数据库。断开后可以再次登录,或关闭浏览器。
3.4 OCILIB
3.4.1 连接及断开数据库
#include stdio.h #include "ocilib.h" int main (int argc, char ** argv) { if (OCI_Initialize (NULL, NULL, OCI_ENV_DEFAULT) == 0)//如果初始化OCILIB库失败,就报错 { return -1; } OCI_Connection * ociConn; ociConn = OCI_ConnectionCreate ("192.168.227.128", "test", "test", OCI_SESSION_DEFAULT);//连接数据库 if (ociConn == 0)//如果连接数据库失败,就报错 { return -1; } OCI_ConnectionFree (ociConn);//断开数据库 return 0; } |
3.5 tnsnames.ora连接描述符配置文件说明
3.5.1 TNS简介
TNS全称Transparence Network Substrate,直译为透明网络底层,也称连接描述符。
Oracle数据库客户端就是通过连接描述符来知道如何连接数据库服务器的。
3.5.2 配置文件路径
本配置文件在Oracle数据库安装路径下的network下的admin下的tnsnames.ora
3.5.3 文件格式说明
表示一个空格,一个都不能少,也不能多
表示连接描述符的名字,不区分大小写
表示数据库服务器的IP地址
表示数据库服务器的端口号,一般不用改
表示直连方式连接数据库服务器,一般不用改
表示数据库服务名,使用SQL show parameter service_name;命令查看
注意:配置多个连接描述符时,每一个之间间隔一空行。
3.6 sqlnet.ora连接方式配置文件说明
3.6.1 简介
本配置文件主要是配置数据库客户端如何连接数据库服务端。例如配置连接超时时间、接收数据超时时间、发送数据超时时间、服务器查找方式等。
3.6.2 配置文件路径
本配置文件在Oracle数据库安装路径下的network下的admin下的sqlnet.ora
3.6.3 文件格式说明
SQLNET.RECV_TIMEOUT = 1 //配置接收数据超时时间,单位秒
SQLNET.SEND_TIMEOUT = 1 //配置发送数据超时时间,单位秒
SQLNET.INBOUND_CONNECT_TIMEOUT = 1 //配置连接超时时间,单位秒
SQLNET_ALLOWED_LOGON_VERSIONS = (11,10,9,8) //允许连接的数据库服务端版本号
3.7 listener.ora监听服务配置文件说明
3.7.1 简介
本配置文件主要是配置数据库服务端的监听服务。
3.7.2 配置文件路径
本配置文件在Oracle数据库安装路径下的network下的admin下的listener.ora
3.7.3 文件格式说明
暂无。
3.8 设置Windows下ODBC访问Oracle数据库
假如Oracle 数据库安装在IP 为 192.168.0.20 的服务器上,实例名为"MyTestInstance",并添加用户mytestuser 和密码 password1,以备下文作为范例使用。服务器上可以配置多个实例,每个实例就是一个逻辑上独立的数据库。
客户端是指需要访问服务端的Oracle数据库的计算机,它可以与服务器是同一台机器,它也可以是网络能够访问到该服务器的任何其它计算机。
下面讨论如何在Windows客户端机上配置 Oracle 9i ODBC 来访问远程Oracle 9i数据库。
通过ODBC来访问Oracle的原理如图所示:
客户程序---- ODBC ---- Oracle OCI ------ Oracle 服务器
首先,在客户端上装一个 Oracle OCI (Oracle Call Interface),它是真正直接与远程Oracle服务器打交到,实现数据传输的组件。为了使用ODBC的统一方式来访问Oracle数据库,还必须装一个Oracle ODBC driver. 它接收客户程序的数据库访问请求,并把ODBC类型的请求转换为对Oracle OCI的请求。OCI实现操纵Oracle数据库,并将查询结果或其它结果返回给ODBC driver, ODBCdriver 最后将结果返回给客户程序。换句话说,客户通过ODBC来访问数据库,而ODBC则是通过调用OCI的API来实现其功能的。
以刚才所述的服务器设置为基础,下面给出客户端Oracle ODBC的配置步骤。
步骤1:安装Oracle 客户端运行时库,其中包括 Oracle OCI.
步骤2:设置 OCI 访问信息
OCI访问Oracle 服务器需要知道
1,服务器IP地址或主机名,(主机名)
2,服务器的监听端口, (端口号)
3,欲访问的数据库实例名。 (服务标识/服务名)
把这三个信息组成的信息集合起个名字就叫数据源名(服务命名)。
这些信息可以通过 Oracle Net Manager 来设置。在它的设置界面中用的名词分别被列在对应的括号中。
本例设置如下:
服务命名: ABCD (随便字符串)
主机名: 192.168.0.20
端口号: 1521 (必须与服务器端的一致,这里是缺省值)
服务标识/服务名: MyTestInstance
以后 Oracle ODBC driver 只需要提供给OCI服务命名(本例为ABCD),OCI就知道如何去访问真正的数据库了。
步骤3:设置ODBC DSN,即 ODBC数据源
进入控制面板/管理工具/数据源(ODBC)/系统DSN
点击添加,选择 MicroSoft ODBC for Oracle,.然后弹出一个对话框,填写如下内容。
1,数据源名称: MyOracleSrc 可随便起,客户程序将用它。
2, 描述:一段说明文字,自己能看懂即可。
3,用户名称: mytestuser 你最终需要访问的数据库所认可的用户名。
4,服务器:ABCD (即OCI设置中的服务命名。这是中文版最容易引起误解的地方。笔者开始就误以为要填写Oracle服务器的主机名)
步骤4: 客户程序通过ODBC访问数据库的方法
客户程序访问数据库时需要三个信息:
1,数据源: MyOracleSrc ,即ODBC DSN中设置的数据源名称
2,用户名: mytestuser
3,密码: password1
这样,就可以访问到192.168.0.20上的数据库 MyTestInstance.
为了验证ODBC设置是否成功,可是使用DB查询分析器试用版照步骤4来进行简单的测试。
4 查看数据库的服务名、实例名、端口号
4.1 Sql*Plus
如果无法连接数据库,就建议使用连接本机数据库方式连接。
查看服务名:
在SQL下输入:select global_name from global_name;
在SQL下输入:show parameter service_name;
查看实例名:
在SQL下输入:select instance_name from v$instance;
查看端口号:
5 管理数据库连接
5.1 查看数据库连接
v$session表里存放所有的数据库连接信息,使用select命令对此表的数据进行查看。其中:
username字段:此连接使用的数据库用户名。
sid字段:此连接的会话ID(Session ID)。
machine字段:此连接的远端主机名。
port字段:此连接的远端端口号。
注意:此视图需要DBA权限才能查看此表。
6 数据库用户
Oracle数据库的每一个用户对应一个用户配置文件,用户配置文件控制着用户的一些行为、权限和资源占用等。
一般的用户都是对应DEFAULT这个用户配置文件,也可以修改对应的用户配置文件名。
Oracle数据库还有一个用户配置文件是否生效开关,如果为TRUE表示开启用户配置文件,如果为FALSE表示关闭用户配置文件,但是用户配置文件里有些配置是不由此开关控制,始终开启(详见4.1.4.5)。
6.1 创建数据库用户
注意:新用户必须赋予connect或dba系统权限后,才能远程连接。
6.1.1 Sql*Plus
在SQL下输入:create user 用户名 identified by 密码;
6.2 删除数据库用户
注意:当前已连接的用户不能删除。
6.2.1 Sql*Plus
在SQL下输入:drop user 用户名 cascade;
6.3 修改数据库用户的密码
6.3.1 Sql*Plus
在SQL下输入:alter user 用户名 identified by "新密码";
6.4 数据库用户权限
6.4.1 用户权限简介
权限分两种,一种是系统权限,一种是对象权限。
系统权限是指数据库系统规定的用户使用数据库的权限,权限作用于用户。
只有拥有DBA权限的用户才能给用户赋予或收回系统权限。
system_privilege_map表里有所有的oracle数据库系统内置的权限。
系统权限有以下几种:
create cluster:
create procedure:
create sequence:
create table:
create view:
create trigger:
create type:
create session:可以创建会话,也就是允许这个用户登录,没有此权限则不可以。
alter session:
create synonym:
create database link:可以创建私有的DBLink,私有的DBLink仅创建的用户可用。
create public database link:可以创建全局的DBLink,全局的DBLink所有的用户都可用。
以下是权限集合:
dba:全部特权,是系统最高权限,可以创建数据库结构,没有此权限则不可以。
resource:允许用户创建各种对象的权限集合,包括:create cluster、create procedure、create sequence、create table、create trigger、create type。
connect:允许用户远程登录的权限集合,包括:alter session、create cluster、create database link、create sequence、create session、create synonym、create view。
Oracle系统权限的分类
群集权限:
CREATE CLUSTER:在自己的方案中创建、更改和删除群集。
CREATE ANY CLUSTER:在任何方案中创建群集。
ALTER ANY CLUSTER:在任何方案中更改群集。
DROP ANY CLUSTER:在任何方案中删除群集。
数据库权限:
ALTER DATABASE:运行ALTER DATABASE语句,更改数据库的配置。
ALTER SYSTEM:运行ALTER SYSTEM语句,更改系统的初始化参数。
AUDIT SYSTEM:运行AUDIT SYSTEM和NOAUDIT SYSTEM语句,审计SQL。
AUDIT ANY:运行AUDIT和NOAUDIT语句,对任何方案的对象进行审计。
索引权限:
CREATE ANY INDEX:在任何方案中创建索引。
注意:没有CREATE INDEX权限,CREATE TABLE权限包含了CREATE INDEX权限
ALTER ANY INDEX:在任何方案中更改索引。
DROP ANY INDEX:任何方案中删除索引。
过程权限:
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:向其他角色或用户授予任何角色。
注意:没有对应的REVOKE ANY ROLE权限。
回退段权限:
CREATE ROLLBACK SEGMENT:创建回退段。
注意:没有对撤销段的权限。
ALTER ROLLBACK SEGMENT:更改回退段。
DROP ROLLBACK SEGMENT:删除回退段。
序列权限:
CREATE SEQLENCE:在自己的方案中创建、更改、删除和选择序列。
CREATE ANY SEQUENCE:在任何方案中创建序列。
ALTER ANY SEQUENCE:在任何方案中更改序列。
DROP ANY SEQUENCE:在任何方案中删除序列。
SELECT ANY SEQUENCE:在任何方案中从任何序列中进行选择。
会话权限:
CREATE SESSION:创建会话,登录进入(连接到)数据库。
ALTER SESSION:运行ALTER SESSION语句,更改会话的属性。
ALTER RESOURCE COST:更改概要文件中的计算资源消耗的方式。
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:在任何方案中锁定任何表。
FLASHBACK ANY TABLE:允许使用AS OF子句对任何方案中的表、视图执行一个SQL语句的闪回查询。
表空间权限:
CREATE TABLESPACE:创建表空间。
ALTER TABLESPACE:更改表空间。
DROP TABLESPACE:删除表空间,包括表、索引和表空间的群集。
MANAGE TABLESPACE:管理表空间,使表空间处于ONLINE(联机)、OFFLINE(脱机)、BEGIN BACKUP(开始备份)、END BACKUP(结束备份)状态。
UNLIMITED TABLESPACE:不受配额限制地使用表空间。
注意:只能将UNLIMITED TABLESPACE授予账户而不能授予角色。
用户权限:
CREATE USER:创建用户。
ALTER USER:更改用户。
BECOME USER:当执行完全装入时,成为另一个用户。
DROP USER:删除用户。
视图权限:
CREATE VIEW:在自己的方案中创建、更改和删除视图。
CREATE ANY VIEW:在任何方案中创建视图。
DROP ANY VIEW:在任何方案中删除视图。
COMMENT ANY TABLE:在任何方案中为任何表、视图或者列添加注释。
FLASHBACK ANY TABLE:允许使用AS OF子句对任何方案中的表、视图执行一个SQL语句的闪回查询。
触发器权限:
CREATE TRIGGER:在自己的方案中创建、更改和删除触发器。
CREATE ANY TRIGGER:在任何方案中创建触发器。
ALTER ANY TRIGGER:在任何方案中更改触发器。
DROP ANY TRIGGER:在任何方案中删除触发器。
ADMINISTER DATABASE TRIGGER:允许创建ON DATABASE触发器。在能够创建ON DATABASE触发器之前,还必须先拥有CREATE TRIGGER或CREATE ANY TRIGGER权限。
专用权限:
SYSOPER
(系统操作员权限)
STARTUP
SHUTDOWN
ALTER DATABASE MOUNT/OPEN
ALTER DATABASE BACKUP CONTROLFILE
ALTER DATABASE BEGIN/END BACKUP
ALTER DATABASE ARCHIVELOG
RECOVER DATABASE
RESTRICTED SESSION
CREATE SPFILE/PFILE
SYSDBA
(系统管理员权限)
SYSOPER的所有权限,并带有WITH ADMIN OPTION子句
CREATE DATABASE
RECOVER DATABASE UNTIL
其他权限:
ANALYZE ANY:对任何方案中的任何表、群集或者索引执行ANALYZE语句。
GRANT ANY OBJECT PRIVILEGE:授予任何方案上的任何对象上的对象权限。
注意:没有对应的REVOKE ANY OBJECT PRIVILEGE。
GRANT ANY PRIVILEGE:授予任何系统权限。
注意:没有对应的REVOKE ANY PRIVILEGE。
SELECT ANY DICTIONARY:允许从sys用户所拥有的数据字典表中进行选择。
对象权限是指某种权限用户对其它用户的表或视图的存取权限,权限作用于用户下的表或视图。
对象权限有以下几种:
select:可以查询表数据。
update:可以更新表数据。
insert:可以插入表数据。
delete:可以删除表数据。
alter:可以修改表。
index:可以创建索引。
all:所有权限。
execute:可以执行存储过程。
权限传递是指被赋予权限的用户还可以赋予此权限给其他用户,增加WITH ADMIN OPTION选项即可。
6.4.2 赋予系统权限
6.4.2.1 Sql*Plus
在SQL下输入:grant 系统权限 to 用户名;
允许传递权限:在SQL下输入:grant 系统权限 to 用户名 with admin option;
注意:多个权限之间用,逗号隔开。
6.4.3 收回系统权限
如果使用WITH ADMIN OPTION为某个用户赋予可传递的系统权限,收回后将不能再使用权限传递,那么对于已经被这个用户赋予相同权限的所有用户来说,不会级联收回这些用户的相同权限。
系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。
6.4.3.1 Sql*Plus
在SQL下输入:revoke 系统权限 from 用户名;
注意:多个权限之间用,逗号隔开。
6.4.4 查看系统权限
6.4.4.1 Sql*Plus
查看当前用户拥有哪些系统权限:
在SQL下输入:select * from session_privs;
查看全部用户拥有哪里权限:
SQL select * from dba_role_privs;
SQL select * from dba_sys_privs;
SQL select * from role_sys_privs;
6.4.5 赋予对象权限
6.4.5.1 Sql*Plus
在SQL下输入:grant 对象权限 on 表或视图名 to 用户名;
注意:多个权限之间用,逗号隔开。
6.4.6 收回对象权限
如果使用WITH ADMIN OPTION为某个用户赋予可传递的对象权限,收回后将不能再使用权限传递,那么对于已经被这个用户赋予相同权限的所有用户来说,同时还会级联收回这些用户的相同权限。
对象权限有级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限也会被收回;对象权限可以跨用户回收,即A可以直接收回C用户的权限。
6.4.6.1 Sql*Plus
在SQL下输入:revoke 对象权限 on 表或视图名 to 用户名;
注意:多个权限之间用,逗号隔开。
6.4.7 查看对象权限
6.4.7.1 Sql*Plus
用户可以查询的表:
在SQL下输入:select owner, table_name from all_tables;
用户创建的表:
在SQL下输入:select table_name from user_tables;
获权可以存取的表(被赋予对象权限的):
在SQL下输入:select grantor, table_schema, table_name, privilege from all_tab_privs;
授出权限的表(赋予对象权限):
在SQL下输入:select grantee, owner, table_name, privilege from user_tab_privs;
6.5 锁定数据库用户
在SQL下输入:alter user 用户名 account lock;
注意:只能是具有DBA权限的用户才能执行此命令。
每一个数据库用户都可以被锁定,锁定后此用户就无法登陆了,解锁后又可以继续登陆了。锁定后,此用户会被提示ORA-28000错误。
如果所有的DBA权限用户都被锁定了,就用sqlplus登陆本机数据库后,执行解锁命令。
6.5.1 查看数据库用户锁定时间
在SQL下输入:select username,lock_date from dba_users where username='用户名大写';
注意:可以查看Oracle服务器的此时段的listener.log日志,就可以知道是什么原因导致的锁定。
6.6 解锁数据库用户
在SQL下输入:alter user 用户名 account unlock;
注意:只能是具有DBA权限的用户才能执行此命令。
6.7 用户配置文件
6.7.1 操作用户配置文件生效开关
查看:在SQL下输入:show parameter resource;
NAME列为resource_limit行的对应VALUE列的值,TRUE表示开启,FALSE表示关闭。
开启:在SQL下输入:alter system set resource_limit=true;
关闭:在SQL下输入:alter system set resource_limit=false;
注意:修改用户配置文件生效开关后,无需重启数据库,实时生效。
6.7.2 创建用户配置文件
在SQL下输入:create profile 用户配置文件名 limit;
6.7.3 查看数据库用户对应的用户配置文件名
在SQL下输入:select username,profile from dba_users where username= '用户名大写';
PROFILE列对应此用户的用户配置文件名。
查看所有用户对应的用户配置文件名:
在SQL下输入:select username,profile from dba_users;
6.7.4 修改数据库用户对应的用户配置文件名
在SQL下输入:alter user 用户名 profile 用户配置文件名;
6.7.5 查看用户配置文件各项资源
在SQL下输入:select * from dba_profiles where profile='用户配置文件名大写';
例如:select * from dba_profiles where profile='DEFAULT';表示查看DEFAULT用户配置文件。
配置文件里各项资源说明: