zoukankan      html  css  js  c++  java
  • Oracle 11g数据库详解

    常见异常:

    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用户配置文件。

    配置文件里各项资源说明:

  • 相关阅读:
    JAVA反射机制--静态加载与动态加载
    MyEclipse导入Hibernate出现Path must include project and resource;/project name
    服务器和java程序的桥梁--jdbc/hibernate
    AndroidStudio快捷键大全
    AndroidStudio怎么实现微信分享功能
    《一面》
    java泛型
    java设计模式-Observer(2)
    java设计模式-Observe
    HashSet的自定义实现
  • 原文地址:https://www.cnblogs.com/momoyan/p/9128557.html
Copyright © 2011-2022 走看看