小型数据库:Access、FoxBASE
中型数据库:MySQL、SQL Server、INFORMIX
大型数据库:Sybase、Oracle、DB2(负载:Sybase < Oracle < DB2)
使用哪种数据库考虑因素:
负载
成本
安全性
安装过程不描述,网上有教程。
Oracle 安装会自动的生成 sys 用户和 system 用户:
sys 用户是超级用户,具有最高权限,具有 sysdba 角色,有 create database的权限,该用户默认的密码是 change_on_install ;
system 用户是管理操作员,权限也很大。具有 sysoper 角色,没有 create database 的权限,默认的密码是 manager ;
一般而言,对数据库维护使用 system 用户登录就可以了。
这两个用户最大的区别在于有没有 create database 权限。
sql * plus 的常用命令 :
连接命令
1. conn[ect]
用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]
当用特权用户身份连接时,必须带上 as sysdba 或是 as sysoper。
2. disc[onnect]
说明: 该命令用来断开与当前数据库的连接 。
3. passw[ord]
说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用 sys/system 登录。
4. show user
说明: 显示当前用户名
5. exit
说明: 该命令会断开与数据库的连接,同时会退出 sql * plus
文件操作命令
1. start 和 @
说明: 运行 sql 脚本
案例: sql>@ d:\a.sql 或是 sql>start d:\a.sql
2. edit
说明: 该命令可以编辑指定的sql脚本
案例: sql>edit d:\a.sql,这样会把 d:\a.sql 这个文件打开
3. spool
说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。
案例: sql>spool d:\b.sql 并输入 sql>spool off
交互式命令
1. &
说明:可以替代变量,而该变量在执行时,需要用户输入。
select * from emp where job='&job';
2. edit
说明:该命令可以编辑指定的 sql 脚本
案例:SQL>edit d:\a.sql
3. spool
说明:该命令可以将 sql * plus 屏幕上的内容输出到指定文件中去。
spool d:\b.sql 并输入 spool off
显示和设置环境变量
概述:可以用来控制输出的各种格式,set show 如果希望永久的保存相关的设置,可以去修改 glogin.sql 脚本
1. linesize
说明:设置显示行的宽度,默认是80个字符
show linesize
set linesize 90
2. pagesize 说明:设置每页显示的行数目,默认是14,用法和 linesize 一样,其它环境参数的使用也是大同小异。
oracle 用户的管理
用户名scott,密码默认 tiger,默认状态是被锁定, DBA 用户执行
alter user scott account unlock; 可以解锁登陆;
scott 是个演示用户,学习用的;
创建用户
概述:在 oracle中 要创建一个新的用户使用 create user 语句,一般是具有 dba (数据库管理员)的权限才能使用。
create user 用户名 identified by 密码;
(oracle密码必须以字母开头,否则不会创建用户)
给用户修改密码
概述:如果给自己修改密码可以直接使用
password 用户名
如果给别人修改密码则需要具有dba的权限,或是拥有alter user的系统权限
SQL> alter user 用户名 identified by 新密码
删除用户
概述:一般以dba的身份去删除某个用户,如果用其它用户去删除用户则需要具有drop user的权限。
比如 drop user 用户名 【cascade】
在删除用户时,注意: 如果要删除的用户,已经创建了表,那么就需要在删除的时候带一个参数cascade;
用户管理的综合案例
概述:创建的新用户是没有任何权限的,甚至连登陆的数据库的权限都没有,需要为其指定相应的权限。
给一个用户赋权限使用命令 grant,回收权限使用命令 revoke。
举例:
SQL>conn stephen/stephen123;
ERROR:
ORA-01045: user STEPHEN lacks CREATE SESSION privilege;
logon denied
警告: 您不再连接到 ORACLE。
SQL> show user;
USER 为 ""
SQL> conn system/p;
已连接。
SQL> grant connect to stephen;
授权成功。
SQL> conn stephen/stephen123;
已连接。
注意:grant connect to stephen 准确的讲,connect不是权限,而是角色。
对象权限
现在要做这么件事情:
* 希望 stephen 用户可以去查询 emp 表
* 希望 stephen 用户可以去查询 scott 的 emp 表
grant select on scott.emp to stephen
* 希望 stephen 用户可以去修改 scott 的 emp 表
grant update on scott.emp to stephen
* 希望 stephen 用户可以去修改、删除、查询、添加 scott 的 emp 表
grant all on scott.emp to stephen
* scott希望收回 stephen 对 emp 表的查询权限
revoke select on emp from stephen
权限的维护
* 希望 stephen 用户可以去查询 scott 的 emp 表,还希望 stephen 可以把这个权限继续给别人。
--如果是对象权限,就加入 with grant option
grant select on emp to stephen with grant option
操作过程:
SQL> conn scott/tiger;
已连接。
SQL> grant select on scott.emp to stephen with grant option;
授权成功。
SQL> conn system/p;
已连接。
SQL> create user bobi identified by bobi123;
用户已创建。
SQL> grant connect to bobi;
授权成功。
SQL> conn stephen/stephen123;
已连接。
SQL> grant select on scott.emp to bobi;
授权成功。
--如果是系统权限。
system 给 stephen 权限时:
grant connect to stephen with admin option;
如果 scott 把 stephen 对 emp 表的查询权限回收,那么 bobi 会怎样? 被回收。
操作过程:
SQL> conn scott/tiger;
已连接。
SQL> revoke select on emp from stephen;
撤销成功。
SQL> conn bobi/bobi123;
已连接。
SQL> select * from scott.emp;
select * from scott.emp
第 1 行出现错误:
ORA-00942: 表或视图不存在
结果显示:bobi 受到牵连。
今天就复习到这,后续更新。