Oracle知识整理笔记
长沙网络推广整理的一篇关于Oracle知识的学习笔记,希望对大家有帮助。
1.简单对比一下SQL Server 和Oracle
先给大家看一张我画得图:
安装完Sql Server后,我们打开、连接数据库引擎后可以看到很多的数据库有系统数据库也有用户数据库。而Oracle安装后,一个数据库都对应一个服务,我们在使用前需要在计算机服务中开启相应的服务,如图中所示,服务开启,用户登录后看到的是一个数据库,一个数据库中可以有表、视图、存储过程等数据对象。一个Oracle数据库可以有多个用户,用户的权限不同,进入到数据库中看到的数据对象也是不同的。
2.Oracle中基本的概念和关系
我总结了一下Oracle中有5个必须要知道的概念:用户、权限、角色、方案和数据对象。
用户的概念大家都知道不用赘述;权限就是能不能做某一件事的证明;而角色可以看做是某些权限的集合体。在Oracle中权限有很多种,如果挨个给用户授权会很麻烦,所以就把一些权限分配给一个角色,那么给用户授予这个角色就解决挨个授予权限的麻烦。方案这里和用户相对应。一个用户,Oracle会默认给它一个方案,这个方案里会存放数据对象。那么数据对象又是什么?一想便知,数据对象就是表、视图、存储过程等的总称。他们之间的关系我用一张图来说明。
系统权限是用户对数据库的相关权限,比如:登录。对象权限是用户对其他用户的数据对象的操作权限。比如:更新其他方案的表。看到这张图不知道大家有没有疑问:Oracle的权限有哪些?角色有哪些?我们怎么操作这个数据库呢?后面的博客会介绍这些。
3.Oracle的一种管理工具pl/sql Developer
pl/sql developer 是用于开发pl/sql块的集成开发环境,它是一个独立的产品,而不是oracle的一个附带品。pl/sql是procedural language/sql是Oracle在标准sql语言上的扩展。pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用例外处理各种错误,使得它的功能变得更强大。
pl/sql块由三部分构成:定义部分、执行部分、例外处理部分。定义部分和例外部分可选。
Declear /* 定义部分-----定义变量,常量,游标,例外,复杂数据类型*/ Begin /*执行部分-----要执行的pl/sql语句和sql语句*/ Exception /*例外处理部分-----处理运行的各种错误*/ End; 举个最简单的例子: Begin dbms_output.put_line('hello,world'); End;
为什么会出现pl/sql中文乱码问题?
前提是:本机没有安装Oracle,采用pl/sql远程访问Oracle数据库。本机安装了Oracle客户端和pl/sql。
服务器上的Oracle有一个字符设置,比如UTF-8或者简体中文,若没有手动修改那么会有一个默认的。在本机上Oracle客户端和pl/sql也需要字符设置.如果服务器和客户端的字符编码不一致,就会出现中文乱码问题。所以,我们要做得就是修改他们使他们一致。(现在看来是如此简单,当时怎么会那么纠结!)
怎么解决pl/sql中文乱码问题?
首先,我们要先知道服务器端的Oracle是什么字符编码。打开你的pl/sql,在命令窗口中输入 select userenv('language') from dual; 就会先看到。如图:
然后要做的就是设置本机的字符设置为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK。办法是设置环境变量。步骤:我的电脑-->右击-->属性-->环境变量-->系统变量-->把nls_lang修改成SIMPLIFIED CHINESE_CHINA.ZHS16GBK,然后需要重启pl/sql。网上很多资料说做到这一步就可以解决问题了。但是我的乱码问题还是解决不了。若你的问题也解决不了,请这样做:打开你的注册表找到这样的目录:找到:HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE 中
设置右侧NLS_LANG,将它的值也设置为SIMPLIFIED CHINESE_CHINA.ZHS16GBK。重启pl/sql后,将已经添加进去的记录删除,重新添加一条再测试。以前添加的记录很可能就是乱码写入的,看不到效果。
4、如何分配权限和角色
1).什么是权限,什么是角色?
权限分为系统权限和对象权限。系统权限是指执行特定类型sql命令的的权利。比如用户具有了create table的权限,可以在其方案中建表;当具有了create any table,可以在任何方案中建表。对象权限是指访问其他方案的权利,用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必须具有对象的权限。比如Scott用户要访问Jane.emp表(Jane方案,emp表),则必须在Jane.emp表上具有对象权限。
角色是相关权限的命令集合,使用角色的目的主要是为了简化权限的管理。
2).常用的权限和角色分类
这里我们只简单介绍最常用的即可,若想了解可查阅帮助文档也可通过查询语句获得。
a.系统权限:关于数据库连接(database link)、会话(session)、用户(User)、表空间(tablespace)、角色(role)、数据对象(表、视图、存储过程)等这些操作的create、drop和alter。
b.对象权限:insert --添加 、delete --删除 (数据)、 Alter --修改(修改表结构) 、Update --修改(更新数据) 、Select --查询 。也就是增删改查四大类。
c.角色分为预定义和自定义两种。预定义是指Oracle所提供的角色,常用的包括:connect,resource,dba.
dba角色具有所有的系统权限,默认的有dba角色的用户是sys和system。 这两个用户可以将任何系统权限授予其他用户。注意一点就是:dba角色没有启动关闭数据库的权利.Connect角色具有一般开发人员需要的大部分权限,多数情况下,只要给用户授权connect和resource角色就够了。那么connect和resource角色都有什么权限呢?这里没有必要一一列举。我们可通过查询获得。那么如何查询呢?
3).查询
如何查询Oracle有多少种角色? select * from dba_roles;
如何查询Oracle有多少种系统权限和对象权限? select * from system_privilege_map order by name; select distinct privilege from dba_tab_privs;
如何查看某个用户有什么样的角色? select * from dba_role_privs where grantee='用户名';
如何查看一个角色包括什么系统权限和对象权限? select * from dba_sys_privs where grantee='角色名'; select * from dba_tab_privs where grantee='角色名';
4).授予和回收
这部分知识在学习过程中是按一条一条规则来的,学完觉得特别乱。我把这里的东西按照一个正常的操作过程编成了一条操作线。感觉知识比较清晰了。
a.现在我要使用Oracle,必须要有用户才行。Oracle默认创建两个用户sys和system.我们可以使用这两个用户登录上去,建立自己的用户,如:create user Ken identified by ken.现在我们使用Ken来登录会给出错误信息。为什么?因为Ken用户没有登录的权限。现在我们需要给Ken授权:grant create session to Ken with admin option.这样Ken用户登录就ok了。那么with admin option能起到什么作用?这说明被授权的用户或者是角色还可以将该系统权限给其他用户或者角色。
回收系统权限操作:依然采用上面的例子:回收登录权限:revoke create session from Ken; 系统权限的回收不是级联的。比如:Ken又将登录权限授予Jane,那么回收Ken的权限后,Jane依然可以登录。
b.对于对象权限来说,我们举个例子:如果我的方案中有一张表emp,现在我想让Ken用户有权限来操作我的表。那我怎么办?第一种办法是用dba用户将操作我的表emp的权限给Ken,这里需要说明一点:dba用户可以将任何对象上的对象权限授予其他用户。第二种办法是我自己来做。 如何做? grant select on emp to Ken with grant option.这里我用到了 with grant option.这能起到这样的作用:Ken用户可以将操作我的表emp的权限在授予别的用户。这里注意一点。它跟with admin option 不同,with grant option只能授予用户,不能授予角色。
回收对象权限操作:revoke select on emp from Ken ;对象权限的回收是级联的。比如:Ken将对emp表查询的权限授予Jane,那么回收Ken的权限后,Jane也不能对emp表进行查询。
c.角色授权这里需要两步:1给角色授权2将角色给某一个用户。现在我们将登录权限给一个角色:grant create session to 角色名;然后把这个角色给用户Ken:grant 角色名 to Ken.删除角色采用 drop role 角色名。
总结:这篇博客侧重于介绍Oracle的基本机制,是最基本的知识,最后还介绍了如何分配权限和角色,包括它们是什么,分类以及如何去用它们。这里我们要搞明白一个前提就很好理解:我们要做某一件事必须要有权限。当我们没有权限的时候可以使用系统用户去做,如果系统授予我们权限那我们也可以做了。
以上就是对Oracle知识的整理,还有许多知识点未涉及到,在将来的文章更新中会陆续补充,希望大家继续关注。