`
jianchen
  • 浏览: 334104 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle数据库学习之第一篇

阅读更多

权限管理:
oracle 9里面默认的三个用户名和密码:
     sys      change_on_install       //权限最高的管理员
     system   manager                  //普通的管理员
     scott    tiger                           //普通用户
在oracle 10中,仍然使用这三个用户作为默认用户。但sys和system用户的密码不再默认。在安装数据库的时候,可以由用户指定 。从安全角度考虑,scott用户默认被锁定,所以要使用该用户,需要先解除锁定。

注意:我们要使用oracle数据库,至少要启动两个服务,一个是监听服务,一个是数据库实例。

创建用户;
以系统管理员的身份登陆。
使用语句:create user lisi identified by lisi; //创建了一个叫lisi的用户,密码也为lisi

虽然创建了用户,但该用户现在并无任何权限。就连登陆数据库的权限都没有。假如使用:sqlplus lisi/lisi 登陆数据库,会报错,显示没有create session的权限。
所以还是先使用系统管理员给lisi这个用户指定登陆的权限。
语句为:grant create session to lisi;

授权过后,lisi可以登陆数据库了。但是现在还没有创建数据库表的权限,仍需指定。
语句为:grant create table to lisi;

使用lisi账号,创建数据库表:create table mytable(id int);
执行后却提示错误:对表空间‘USERS’无权限 。每个数据库表都有自己的表空间,相当于文件必须位于某个文件夹下。
虽然lisi用户具有创建表的权限,但没有使用表空间的权限,最终还是创建不了表。这就好比你有我房间的钥匙,但是没有我家大门的钥匙,你最终还是进不了我的房间。

通过系统管理员授予lisi用户使用表空间的权限:
grant unlimited tablespace to lisi; 这样用户lisi对表空间的使用就没有限制了。

在lisi账户下,创建表:create table mytable(id int);
插入一条记录:insert into mytable values(1);
插入成功。
也可以删除表:drop table mytable;

有人可能会产生疑问,既然数据库的权限管理这么严格,上面我们只是授予lisi用户创建表的权限。并没有授予其插入,删除等权限呀。这里我们可以这样理解:当前用户创建了一个表,那么该表就属于该用户,用户既然创建了表,自然就对该表拥有一切权限啦。
而且:数据库并没有drop table的权限。使用:grant drop table to lisi;出现:权限缺失或无效的错误提示。

上面是授予权限,那么如何撤销用户的某个权限呢?
使用如下语句可以撤销lisi的创建表的权限:revoke create table from lisi;
再使用lisi账号创建表,就会出现错误提示:权限不足

在大多情况下,如果我们对用户的权限经常修改,我们如何知道用户有哪些权限呢?
数据库默认维护了一个视图对外提供一些系统信息(叫数据字典),可以查看用户的具体权限。
使用如下语句查看当前用户的系统权限:
select * from user_sys_privs;
USRENAME                                        PRIVILEGE                                ADM
----------------------------------------------- ---------------------------------------- ----
LISI                                            CREATE SESSION                           NO
LISI                                            UNLIMITED TABLESPACE                     NO

oracle中的权限分为系统权限和对象权限。
系统权限就是我们上面所讲的一些权限。
对象权限是指:比如用户lisi创建了一个表,该表就可以作为一个对象看待。另外一个用户是否有访问该表的权限呢。这就是所谓的对象权限管理。

我们在创建一个用户wangwu。密码也为wangwu。在该用户下,创建一个表mytab。如果lisi用户向访问表mytab,是否会成功呢?
在lisi的窗口下,输入:select * from mytab;报错:表或视图不存在 。我们知道表属于表的创建者。
这里我们直接查询表mytab,数据库会到当前用户下寻找该表,显然当前用户lisi没有表mytab。所以提示表或视图不存在。
那我们指定表的所有者,再次查询:select * from wangwu.mytab;窗口显示“权限不足 ”的错误提示。由此可知,虽然找到了mytab表,却没有访问的权限。

只有表的拥有者才可以授予该表的相关权限给其他用户。使用用户wangwu的操作窗口,使用如下语句,把查询语句授予lisi;
grant select on mytab to lisi;
执行此语句后,lisi就可以查询用户wangwu的mytab表了。

如果要获得其他对于mytab表的权限,仍然需要指定(多个权限同时指定,用逗号分隔):
grant update,select,delete on mytab to lisi;
如果要把表的所有权限都赋予给用户lisi,可以这样写;
grant all on mytab to lisi;


在wangwu的窗口下,向mytab插入几条数据。然后查询,却显示“未选定行 ”。说明刚才的插入没有同步到数据库中去。
在oracle下,默认需要对sql语句手动进行提交。所以在几条插入语句后,可以执行commit ;语句提交。再次查询,表中就有数据了。

如果要把某个权限授予所有的用户,可以使用public关键字:
grant create session to public

查看当前用户的对象权限 ,使用如下语句:
select * from user_tab_privs;

oracle的权限控制粒度很细,甚至可以精确到某一列的权限。
grant update(name) on mytab to lisi;
这句执行的效果就是,lisi用户对表mytab仅拥有更新name这一列的权限。
grant insert(id) on mytab to lisi;

查看当前用户对数据库表的列的权限
select * from user_col_privs;

在lisi权限下,执行:update wangwu.mytab set name='fdsfa',id="dfs" where id=1;
执行后显示权限不足
update  wangwu.mytab set name="fsa" where id=1;
这样就可以了。
同样执行:insert into wangwu.mytab values(4,"asf");执行后也显示权限不足。
修改语句为:inset into wangwu.mytab(id) values(4);成功执行。
只能对更新和插入设定精确到某列的权限控制,不能对查询和删除设定。
命令:show user可以查看当前用户

数据库有三种类型的语句:
ddl:数据定义语言,指定是数据库表的创建,删除之类的操作。
dml:数据操纵语言,针对表的增删改查操作,只有dml需要进行提交操作。
dcl:数据控制语言,对系统权限和对象权限的管理。

权限的传递:
系统权限的传递:
sys用户把一些系统权限授权给lisi用户.
grant alter any table to lisi;
查看lisi的系统权限,就有了alter any table的权限。
现在lisi想把该权限传递授权给wangwu用户执行以下语句:grant alter any table to wangwu;执行后报“权限不足”。
要想lisi也可以传递权限,可以在sys用户授权时加上with admin option的选项,该选项就说明了还拥有权限的管理能力。
即:grant alter any table to lisi with admin option ;这样lisi就可以把alter any table的权限传递给wangwu了。
要想wangwu也可以传递该权限,也使用该admin选项即可。
查看lisi的系统权限,他的alter any table权限的同一行的adm 字段取值由NO变为YES,说明lisi对该权限具有分配功能了。

对象权限的传递:
与系统权限的传递类似,不过后面的选项有所改变:
加入sys创建了一个A表。授予lisi的select权限:
grant select On A to lisi;
如果想让lisi拥有对A表的select权限的分配能力,只需修改为:
grant select On A to lisi with grant option ;

思考:如果sys管理员撤销了lisi的权限,那么wangw的权限是否也被撤销了呢?


通过角色对权限进行管理
如果按照上面的权限管理方法 ,对每个用户逐一的分配权限,必然会很混乱,导致管理的困难。所以oracle提供了角色来对权限进行集合化的管理。

角色就是权限的集合。

在sys下创建角色:
create role myrole;
给角色添加权限:
grant create session to myrole;
grant create table to myrole;

创建用户:
create user zhangsan;
grant myrole to zhangsan; //赋予以上的两个权限给zhangsan

有些系统权限无法直接赋予角色,因为该权限太大了,比如unlimited tablespace。
例如:执行grant unlimited tablespace to myrole;
出现错误提示:无法将unlimited tablespace授予角色

删除角色:
drop role myrole;

权限举例:
create table     create any table
[alter table]      alter any table
[delete table]     delete any table
补充:oracle数据库不含紫色的权限类型。因为有了create table权限,说明表的一切都归创建者。不需要还指定alter table和drop table权限了,默认就有了。
而create any table这个权限表明该用户可以给其他用户创建表。
示例:wangwu给lisi创建一个表temp
create table lisi.temp (id int);//有可能报“超出表空间‘USERS’的空间限额”错误提示,那是因为lisi用户可能还没有表空间权限,执行赋予lisi用户unlimited tablespace的权限,问题即可解决。

注意:表是属于某个用户的。而角色不属于某个用户。

oracle三种登陆验证机制

操作系统验证
密码文件验证
数据库验证
对于绝大多少的普通用户而言,数据库启动后,用户登陆时采用的是数据库验证。
而对应sys用户,它的权限是最大的。它的权限甚至包括启动和关闭数据库。它在oracle数据库还没启动时,就连接到oracle数据库中去,进行启动。这样我们不难理解,sys的身份验证不可能采用数据库验证,因为当时数据库还没有启动呢。所以sys的身份验证使用的是操作系统验证和密码文件验证(这样说不是很严格,应该是以SYSDBA和SYSOPER连接身份登陆都会以这两种方式进行验证)。

 当一个用户连接数据库的时候,客户端首先连接到监听服务,监听把请求发送到数据库,如果验证通过了,以后就不需要监听了,客户端直接和数据库实例通信。
早期在linux和unix上运行的oracle,它有严格的启动顺序:先启动监听(只需要敲个命令即可,不需要什么权限),后启动数据库实例(需要权限)
执行的命令序列:lsnrctl start  //启动监听服务
                sqlplus sys/oracle as sysdba //启动数据库实例的请求,发现以sysdba的身份连接,所以不进行数据库验证,而是采用操作系统和密码文件验证。如果验证通过,运行启动数据库实例
                startup  //启动数据库实例

早期版本命令得这样写:
lsnrctl start
sqlplus /nolog
conn sys/oracle as sysdba

    startup 

在windows下oracle的启动过程,进行了傻瓜式的封装:
lsnrctl start
oradim -starup -sid orcl

补充: 在连接到数据库时,可以这样写:conn / as sysdba也可以连连上,甚至胡乱指定用户名和密码,如:conn abc/abc as sysdba都可以登陆。这是因为连接是以sysdba身份,首先采用操作系统验证。在我们安装数据库时,会把当前系统的账号添加到oracle的系统管理员组 中去。按以上方式连接,它是默认根据系统的当前账户验证通过的。把管理员组中的该系统账号删去后,他就会采用密码验证机制,就必须要指定用户名和密码了。

问题:丢失密码怎么办?
我们知道如果普通用户的密码忘记了,我们可以管理员的身份对该用户的密码进行修改(无法查看,因为密码都是加了密的,只能修改)
可以在图形化的工具下直接进行修改。也可以以命令的方式:
alter user scott identified by tiger;

在实际开发中,我们要把操作系统验证给取消掉。那以后就会采用密码验证了。但是假如我们把密码忘记了,又如何解决呢?
我们可以把密码文件删掉,在生成一个密码文件即可。
找到密码文件的所在地:..\db_2\database\pwd orcl.ora ,红色部分是该密码文件命名的固定部分,orcl指的是数据库的sid,可能不一样
删除密码文件后,再生成一个。使用orapwd命令,具体如下:
orapwd file=<密码文件的全路径,密码文件的命名要按照先前> password=<指定的密码> entries=<该密码文件保存的DBA最大数量> force=<y/n>只是否强制覆盖文件操作
示例:orapwd file=E:\oracle\ora92\database\pwdora9i.ora password=sys entries=10;

使用以下语句查看在该密码文件中放了多少特权用户:
select * from v$pwfile_users;

创建用户:
create user 用户名
identified by 密码
default tablespace 表空间
temporary tablespace 表空间
quota 整数 K|M|unlimited on 表空间

示例:
create user abc
identified by abc
default tablespace users   //用户的默认表空间为users,在该表空间下用户可以创建表
temporary tablespace temp  //用户的临时表空间,用于索引,排序等工作的临时场所,相当于windows下的临时文件夹
quota 50M on users         //指定users表空间的限额大小
quota unlimited on temp;   //指定临时表空间的限额大小

限制用户
用户加锁
alter user 用户名 account lock

用户解锁
alter user 用户名 account unlock

用户口令即刻失效
alter user 用户名 password expire

删除用户:
drop user 用户名 [cascade]
cascade 用在当被删除的用户下还有未删除的对象(如一些表)时,强制级联删除。它表示删除用户所有对象。

分享到:
评论

相关推荐

    Oracle数据库精讲之数据库管理_ Oracle数据库管理视频

    第一讲:Oracle体系结构 第二讲:Oracle实例中内存结构 第三讲:Oracle实例中后台进程管理 第四讲:Oracle数据数据文件管理 第五讲:Oracle数据库在线日志文件管理 第六讲:Oracle数据库归档日志文件管理 第七讲:...

    Oracle数据库学习指南

    1. 《Oracle8 优化技术》摘录 (第一章 安装) 2. 《Oracle8 优化技术》摘录 (第二章 内存-CPU) 3. 《Oracle8 优化技术》摘录 (第三章 输入-输出) 4. EXP、IMP 命令详解 5. Oracle Index 的三个问题 6. ...

    Oracle数据库基础教程-参考答案

    第1章Oracle数据库概述 1.简答题 (1) 数据是描述事物的符号,是数据库中存储的基本对象。在计算机中,用记录的形式来描述数据。数据与数据的解释即数据的语义是紧密结合的。数据库是指按一定的数据模型组织、描述...

    炼数成金 课程+教材 Oracle数据库职业直通车-Oracle入门学习教学视频 谭怀远老师.txt

    第1课 轻松带你走进Oracle数据库的世界 第2课 从最简单的SQL语句开始 第3课 Oracle数据库的安装和配置 第4课 Oracle数据库的参数文件,控制文件,数据文件和日志文件 第5课 Oracle体系架构简述 第6课 Oracle...

    第1章 Oracle数据库基础

    第1章 Oracle数据库基础第1章 Oracle数据库基础第1章 Oracle数据库基础第1章 Oracle数据库基础第1章 Oracle数据库基础第1章 Oracle数据库基础

    Oracle10数据库电子教案

    第1章 Oracle Database 10g数据库基础 第2章 Oracle Database 10g的安装及运行环境 第3章 数据库和表的基本操作 第4章 数据操作及完整性 第5章 SQL查询技术 第6章 索引和视图 第7章 PL/SQL编程 第8章 存储过程和...

    Oracle DBA培训教程 从实践中学习Oracle数据库管理与维护_part1

    压缩包PART1,与PART2共同解压。 ORACLE数据DBA入门与提高教程。包含Oracle数据库管理与维护内容。...一本Oracle数据库管理的入门教材,适合于初中级的读者,是作者二十多年IT工作和教学实践的总结与升华。

    Linux系统怎么用命令重启oracle数据库.docx

    Linux系统下oracle数据库是经常使用到的数据库之一,有时候我们重启数据库更新数据或者其他插件,具体怎么操作呢。下面由店铺为大家整理了Linux重启oracle数据库的命令和方法,希望对大家有帮助! Linux重启oracle...

    完整版Oracle11数据库教程课件 全套PPT课件资源集合 全套12个章节.rar

    完整版Oracle11数据库教程课件 第1章_数据库理论基础(共13页).ppt 完整版Oracle11数据库教程课件 第2章_Oracle体系结构(共11页).ppt 完整版Oracle11数据库教程课件 第3章_SQL语言概述及简单查询(共19页).ppt ...

    在xp虚拟机上面的oracle数据库

    这是一个虚拟机机文件,直接打开就可以使用,该虚拟机是一个xp系统,系统中已经安装了oracle数据库,具体的操作我自己...省去搭建oracle数据库环境的时间,如果连接失效什么的,请留言,我会在看到的第一时间重新补上。

    ORACLE数据库体系架构视频教程详细完整版

    第三部分:管理Oracle数据库 第十六章:Oracle ASM 管理 第十七章:逻辑备份与恢复 第十八章:物化视图。 由于文件过大,只提供百度网盘下载地址和提取码,请放心下载。 信誉第一,如有任何问题,可以给我发私信或者...

    Visual C++与Oracle 数据库编程案例

    第一部分介绍了Oracle数据库基础Visual C++开发数据库应用的多种方法,包括MFC ODBC、ADO,以及利用Oracle提供的OO4O 开发数据库的方法等。第二部分以多个管理系统为例,按照系统设计、数据库设计与实现、系统的实现...

    Oracle数据库讲义

    本书献给那些想学习ORACLE数据库的人。 本书含有六大部分:第一部分sql基础,第二部分pl/sql基础,第三部分数据库的体系结构和数据库一些包的应用,第四部分数据库的网络配置,第五部分数据库的备份和恢复,第六部分...

    解密Oracle数据库引擎原理

    起初,Oracle公司开发了一种名为Oracle数据库的关系数据库管理系统,并于1979年推出了第一个商业版本。 随着时间的推移,Oracle数据库不断发展壮大。在1983年,Oracle发布了第二个版本,并加入了事务处理和并发控制...

    Oracle数据库服务器配置

    Oracle数据库的详细配置方法,按照上面的步骤一步一步来,很适合第一次接触oracle的初学者

    第1章_Oracle数据库基础.pdf

    第1章_Oracle数据库基础.简要介绍数据库的基本知识,帮你尽快认识oracle数据库基本知识

    第1章 Oracle数据库简介.ppt

    第1章 Oracle数据库简介.ppt 。是关于oracle的相关简要介绍。

    Oracle 数据库 第1章 基本概念

    Oracle 11g 数据库 Oracle 数据库 第1章 基本概念

    数据库原理及应用(ORACLE)

    第1章 数据库的概念 第2章 实体联系模型 第3章 关系模型及ORACLE对象关系数据库 第4章 ORACLE SQL和PL/SQL 第5章 关系数据库设计理论 第6章 数据库的设计与维护 第7章 数据库保护 第8章 ORACLE的企业管理器...

    Oracle数据库同步技术

    基于Oracle数据库的数据同步技术大体上可分为两类:Oracle自己提供的数据同步技术和第三方厂商提供的数据同步技术。Oracle自己的同步技术有DataGuard,Streams,Advanced Replication和今年刚收购的一款叫做...

Global site tag (gtag.js) - Google Analytics