- 浏览: 336219 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
hufangxian:
估计面试官都被你的回答搞晕了。
抽象类和接口的理解 -
alvin198761:
需要了解多态和设计模式,了解一些框架的原理,你就知道这东东真正 ...
抽象类和接口的理解 -
sangei:
谢谢楼上提醒,希望慢慢能有所进步。
抽象类和接口的理解 -
jackra:
书背的不错可以看看设计模式如何使用抽象类
抽象类和接口的理解 -
ptsd:
lag(column_x,number1,XX)用来返回当前数 ...
【转】oracle的LAG和LEAD分析函数
权限管理:
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,可以这样写;
grantallon mytab to lisi;
在wangwu的窗口下,向mytab插入几条数据。然后查询,却显示“未选定行”。说明刚才的插入没有同步到数据库中去。
在oracle下,默认需要对sql语句手动进行提交。所以在几条插入语句后,可以执行commit;语句提交。再次查询,表中就有数据了。
如果要把某个权限授予所有的用户,可以使用public关键字:
grant create session topublic;
查看当前用户的对象权限,使用如下语句:
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 lisiwith 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 lisiwithgrantoption;
思考:如果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 tablelisi.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\pwdorcl.ora,红色部分是该密码文件命名的固定部分,orcl指的是数据库的sid,可能不一样
删除密码文件后,再生成一个。使用orapwd命令,具体如下:
orapwdfile=<密码文件的全路径,密码文件的命名要按照先前> 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 用在当被删除的用户下还有未删除的对象(如一些表)时,强制级联删除。它表示删除用户所有对象。
发表评论
-
数据库软删除IsDeleted
2015-07-08 14:33 1228http://www.infoq.com/cn/news/20 ... -
(转)Meta data 元数据
2013-01-30 15:27 847元数据最本质、最抽象的定义为:data about data ... -
如何查询Oracle表空间和数据文件信息(转)
2013-01-11 13:47 1215http://tech.sina.com.cn/s/2008- ... -
(转)如何开启/关闭归档
2012-07-16 11:37 890如果开启归档,请保证log_archive_start=tru ... -
(转)Oracle 数据库实例启动关闭过程
2012-06-07 00:27 1317/* Oracle数据库实例的启动,严格来说应该是实 ... -
(转)oracle数据库实例,数据库的理解
2012-06-07 00:26 1315数据库就是一个相片底 ... -
(转)oracle各种partition的分析
2012-05-29 01:23 2275总结自ORACLE官方在线帮助文档。 ORACLE 为 ... -
最简单的表示oracle概念关系
2012-05-29 01:20 1178从逻辑上来讲:Datebase -> Tablespac ... -
(转)table space和data file的offline
2012-05-29 00:09 16801、对一个datafile执行offline或offline ... -
(转)Oracle分区表 (Partition Table) 的创建及管理
2012-05-28 23:43 2550Oracle分区表 (Partition Table) 的 ... -
(转)全面学习分区表及分区索引
2012-05-28 23:40 853http://space.itpub.net/7607759/ ... -
(转)Oracle Partitioned Table:exchange的利用
2012-05-28 23:37 1600周末作了一天的Partitioned Table旧有资料的归档 ... -
(转)Oracle的启动方式
2012-05-28 23:35 32Oracle的几种启动方式 1、startup nomoun ... -
(转)Oracle数据文件迁移
2012-05-28 23:28 2061windows xp oracle 9. 2.0.1.0 si ... -
oracle 密码过期
2012-04-18 14:13 1498【原因/触发因素】 确定是由于oracle11g中默认在de ... -
(转)Oracle Partition 分区详细总结
2012-04-13 01:45 1169此文从以下几个方面来整理关于分区表的概念及操作:1.表空间及分 ... -
(转)Oracle 表空间与数据文件
2012-04-13 01:36 1272一、概念 表空间:是一个或多个数据文件的逻辑集合 ... -
(转)oracle实例名,服务名等概念区别与联系
2012-03-22 17:20 1458数据库名、实例名、数据库域名、全局数据库名、服务名 ,这是几个 ... -
删除archive log
2011-10-24 01:44 3654两种方法:1、配置RMAN自动管理ARCHIVELOG。也可在 ... -
绝对清楚的区分数据库,实例,服务名,SID
2011-09-01 17:54 8023在实际的开发应用中,关于Oracle数据库,经常听见有人说建立 ...
相关推荐
MySQL的权限管理相对简单,而Oracle有更复杂的用户、角色和权限体系。在转换时,需要考虑用户权限和角色的迁移。 4. **表空间和分区**: Oracle支持表空间和分区,这是MySQL不具有的特性。在转换过程中,可能需要...
授予权限是 Oracle 权限大全的重要内容,包括授予创建 session 的权限、授予使用表空间的权限、授予创建表的权限、授予删除表的权限、授予插入表的权限、授予修改表的权限等多种权限。 grant 命令是授予权限的基本...
工具需要考虑如何将MySQL的权限设置转换为Oracle的权限模型。 5. **索引和视图**:索引能优化查询性能,视图则可以提供简洁的查询接口。迁移工具应处理这些非基本表的对象。 6. **数据一致性**:在迁移过程中,...
在这个“Oracle权限全集”中,我们将深入探讨Oracle数据库中的各种权限类型、权限的授予与撤销、角色的使用以及与权限相关的其他关键概念。 1. **权限类型** - **对象权限**:针对特定对象(如表、视图、序列、...
韩顺平的“玩转Oracle”视频教程旨在帮助学习者掌握Oracle的核心概念和技术。以下是对视频教程笔记的详细解析: 首先,Oracle认证是成为Oracle数据库管理员的重要步骤,这涉及到对数据库系统的深入理解和操作。与...
### Oracle权限管理详解 在Oracle数据库管理中,权限管理是一项重要的功能,它涉及到数据库的安全性和数据访问控制。本文将基于提供的文件信息,详细介绍Oracle中如何创建用户、分配及撤销权限等关键操作,并深入...
### Oracle权限函数详解 在Oracle数据库管理中,权限管理是一项重要的任务,它涉及到对用户、角色及对象等数据库实体的访问控制。通过合理地分配权限,可以有效地保护数据的安全性和完整性,同时确保业务流程的正常...
Oracle 权限设置 一、权限分类: 系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。 实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。 二、系统权限管理: 1、...
Convert Mysql to Oracle 最新版本:4.0 Convert Mysql to Oracle是一个免费的数据库转换工具,实现快速安全地...有相应的数据库操作权限 在机器中安装了ORACLE客户端,使得Convert Mysql to Oracle能够成功连接到ORACLE
我现在想从我的存储过程中使用其他 schema 表来执行 SQL 语句。存储过程是一个 Schema,表是在另一个 Schema。...是在同一个 Oracle 实例中,数据库是 Oracle 10g。 答:你的两个 Schema 是在同一个 Oracle 实
Oracle权限分为两种基本类型:系统权限和对象权限。系统权限涉及到对数据库整体操作的访问,如创建表、执行DML(数据操纵语言)语句、备份数据库等。对象权限则针对特定数据库对象,如查看、修改、删除某张表的数据...
### Oracle权限设置详解 在Oracle数据库管理中,权限设置是一项非常重要的任务,它不仅涉及到数据库的安全性,还关乎数据的完整性和系统的稳定性。本文将基于提供的文件信息中的内容,详细介绍Oracle权限设置的相关...
### Oracle权限管理详解 #### 一、Oracle权限概述 Oracle数据库通过权限管理机制来确保数据的安全性和完整性。权限主要包括系统权限(SYS PRIVILEGES)和对象权限(OBJECT PRIVILEGES)。系统权限允许用户执行特定...
Oracle数据库权限管理是数据库安全的重要组成部分,它确保了数据的安全性、完整性和一致性。在Oracle环境中,权限控制是通过授权(GRANT)和回收(REVOKE)操作来实现的,以决定用户或角色可以访问哪些资源以及他们...
Oracle 常用系统权限 Oracle 系统权限是 Oracle 数据库中的一种安全机制,用于控制用户对数据库对象的访问权限。了解这些权限对于开发人员来说非常重要,因为它们可以帮助开发人员更好地控制数据库的安全性和访问...
Oracle权限管理是数据库安全的重要组成部分,它确保了对数据库资源的正确访问和控制。在Oracle中,权限分为系统权限和对象权限。系统权限涉及到数据库级别的操作,如创建表、索引、用户等;对象权限则涉及到对特定表...
《玩转Oracle:从基础到实践》 Oracle数据库系统是全球广泛使用的数据库管理系统之一,尤其在企业级应用中占据重要地位。"韩顺平玩转Oracle视频笔记"是一份非常适合初学者的学习资料,通过视频教程的形式,深入浅出...
"使用PLSQL创建Oracle数据库用户并设置权限" 在 Oracle 数据库中,创建用户并设置权限是数据库管理员的基本任务之一。在本文中,我们将使用 PLSQL 创建 Oracle 数据库用户并设置权限,包括创建用户、设置权限和创建...
"lesson_xml_pm3"可能是一个关于Oracle权限设计的课程或教程文件,可能包含了具体的案例、练习或脚本,用于帮助学习者理解和实践Oracle权限设计的方法。通过学习这个资源,你可以更深入地了解如何在实际环境中设计和...