1.Oracle简介
Oracle是目前最流行的数据库之一,功能强大,性能卓越
Oracle完全可以代表数据库的最高水平,因此,学习Oracle需要具备一定的基础。
Oracle学习路线
-
基础部分
-
安装/卸载
-
链接数据库
-
退出数据库
-
用户管理
-
表管理
-
-
进阶部分
-
表操作(增删改查),即CRUD
-
角色、权限
-
函数
-
sql编程
-
数据库
-
索引(有效解决大量数据查询效率的有效手段)
-
约束,主外键关联
-
事务(用于保证事务的完整性)
-
2.数据库的比较
目前主流数据库
- 微软:Sql Server和access
- Sql Server非常适合.net体系语言,其他语言也可以,只不过存在效率和稳定度的问题。
- 瑞典:AB公司的MySql
- Mysql的前身就是瑞典AB公司的产品,后被Oracle收购。
- IBM公司:db2和informix
- db2,大型数据库(体量大过了Oracle)
- 美国Sybase公司:Sybase
- 美国Oracle公司:Oralce
Oracle跟MySql的比较
-
MySql没有在权限/角色上的要求,是一种中小型的数据库
-
Oracle在权限/角色上的要求特别严格,这样可以防止所谓的“删库跑路”
数据库划分
-
负载量,并发数
-
成本(项目经费)
-
安全(迄今为止最重要的,也是最看重的)
-
根据规模来划分:
-
小型数据库
- 数据库:access、foxbase、sqlite
- 负载量:很小,10个人以内使用,除了sqlite(1个人)
- 成本:2000元以内,除了sqlite(免费)
- 安全性:几乎没有
-
中型数据库
- 数据库:Sql Server、MySql、Informix
- 负载量:100人左右(单机)
- 成本:万元以内(Sql Server),虽然Sql Server是收费的,但是他有教育成本
- 安全性:具有安全性,但不是很强
-
大型数据库
- 数据库:db2、Oracle、sybase
- 负载量:db2 > oracle > sybase
- 成本:万元以内(Sql Server),虽然Sql Server是收费的,但是他有教育成本
- 安全性:具有安全性,但不是很强
-
3.Oracle数据库的安装
- 确认你的计算机没有和Oracle相关内容
- 如果要安装Oracle数据库之前建议做两个准备工作:关闭防火墙,断开网络
- 安装过程可以参考其他文章,这里不再详述
4.Sql Plus语法
Oracle的sqlplus是与oracle数据库进行交互的客户端工具,借助sqlplus可以查看、修改数据库记录。在sqlplus中,可以运行sqlplus命令与sql语句。
登录sqlplus:在cmd平台下输入
sqlplus
登录之后,需要输入相应的用户名和密码,当显示以下结果时:
就说明登录Sql Plus成功。
这里再学习一下Sql Plus的常见语法。
Sql Plus常见语法
- 查询登录用户
show user
- 查询所有的表
SELECT * FROM tab
- 修改每页显示的行数
set linesize <行数>
- 退出Sql Plus
exit
- 通过Sql Plus新建文件
edit <目录/文件名.后缀名>
- 执行文件中的sql指令,如果后缀名是.sql可以省略
start <目录/文件名.后缀名>
或者
@ <目录/文件名.后缀名>
- 将Sql Plus屏幕上的内容保存在文件中
开始:
spool <sql文件>
结束:
spool off
会记录spool在开始和结束之中的所有信息。
- 创建用户
create user <用户名> identified by <密码>
注意:在11g以下的版本中,密码必须以字母开头,否则不会创建用户。另外,创建用户需要管理员权限。
- 修改用户的密码,如果给自己修改密码可以直接使用
password <用户名>
注意:如果给别人修改密码则需要具有dba的权限,或是拥有alter user的系统权限
alter user <用户名> identified by <新密码>
- 删除用户
drop user <用户名> [cascade]
注意:如果要删除用户则需要具有dba的权限,或是拥有drop user的系统权限。另外,如果要删除的用户,已经创建了表,那么就需要在删除的时候带一个参数cascade
- 切换用户
conn <用户名/密码>
Sql Plus中的用户管理
创建的新用户是没有任何权限的,甚至连登陆数据库的权限都没有,需要为其指定相应的权限。给一个用户赋予权限使用命令grant,回收权限使用命令revoke。
- grant
授权给需要登录的用户
grant connect to <需要登录的用户>
注意:这个connect不是登录权限,它是Oracle默认的权限角色(可以参考RBCA原理)
授权给需要查询的用户
grant select on <表名> to <需要查询的用户>
注意:在查询的时候,需要带上表的归属者,示例如下:
希望a用户可以查询b用户的c表
select * from b.c
- revoke
收回用户的查询权限
revoke select on <表名> to <被撤销查询权限的用户>
注意:一般情况下,回收系统权限是dba来完成的,如果其他的用户想要回收系统权限,要求该用户必须具有相应的系统权限及转授系统权限的选项(with <admin> option)
- 授予权限的继承
带有(with <admin> option(对象权限))的属性的意思就是将授权的权限一次性给予客户。
假设A是普通用户,具有一定权限,B和C是新建的用户,没有任何权限
A可以赋予B查询某张表的权限,但B不可以接着将相同的权限给予C。
若此刻是A用户,执行以下语句,将查询权交给B:
grant select on <某张表> to B
可以执行。当切换到B用户时,执行而以下语句:
grant select on <某张表> to C
会提示失败。
此刻,再次切换到A用户,加上之前提到的关键词:
grant select on <某张表> to B with grant option
授予完成后,切换到B用户,此刻B已然具有给C授权的权限。
注意:执行完以上操作后,B和C此刻都具有查询A中某张表的权限。但是若A用户收回B用户的查询权限,C用户的查询权限也会跟着被收回,可以理解成所谓的“连带责任”
- 使用profile管理用户口令
profile是口令限制,资源限制的命令集合,当建立数据库时,Oracle会自动建立名称为default的profile,当建立用户没有指定profile选项,那么Oracle就会将default分配给用户。
账户锁定
指定该用户登录时最多可以输入密码的次数,也可以指定用户锁定的时间(天)一按用dba的身份去执行该命令。
例如:指定scott这个用户最多只能尝试3次登陆,锁定时间为两天,sql语句如下:
SQL>create profile lock_account limit failed_login_attempts 3 password_lock_time 2;
SQL>alter user scott profile lock_acount;
给用户解锁
alter user scott account unlock;
终止口令
为了让用户定期修改密码可以使用终止口令的指令来完成,同样这个命令也需要dba来操作。
例如:给tea这个用户创建一个profile文件,要求改用户每隔10天要修改自己的登录密码,宽限期为2天,sql语句如下:
SQL>create profile password_history limit password_life_time 10 password_grace_time 2;
password_reuse_time这句话的意思是:指定口令可重用的时间,上例即说明10天后该口令就可以重用。
口令历史
如果希望用户在修改密码时,不能使用以前使用过的密码,可使用口令历 史,这样oracle 就会将口令修改的信息存放到数据字典中,这样当用户修改密码时, oracle 就会对新旧密码进行比较,当发现新旧密码一样时,就提示用户重新输入密码。
例子:首先建立profile
SQL>create profile password_history limit password_life_time 10
password_grace_time 2 password_reuse_time 10
password_reuse_time:指定口令可重用时间即10 天后就可以重用
随后,分配给某个用户即可
删除口令
当不需要某个profile 文件时,可以删除该文件。
例子:
SQL>drop profile password_history[casade]
注意:文件删除后,用这个文件去约束的那些用户通通也都被释放了。加了casade,就会把级联的相关东西也给删除掉