概要图

概要图

oracle-表空间-用户-角色-权限-LMLPHP

一 表空间

1.1创建表空间

--问题:创建一个名为hp的表空间,指定数据文件为hp.dbf,大小为10m.

create tablespace hp

datafile 'C:\app\hp\hp.dbf'

size 10M

autoextend on next 5m

maxsize unlimited;

1.2 删除表空间

drop tablespace hp;

1.3思考题

删除表空间的时候,如何删除关联的数据文件??

drop tablespace test_data including contents and datafiles;

二 创建用户

2.1创建用户

--语法结构:create user 用户名 identified by 密码 【default tablespace 表空间名】【temporary tablespace temp】

create user 用户名 identified by 密码

[default tablespace users]  //用户的默认表空间:users

[temporary tablespace temp]  //用户使用的临时表空间temp

[quota 3m on users];        //默认表空间中可以使用的空间配额:3MB
create user hope identified by ;

create user hope1 identified by  default tablespace users;

create user hope2 identified by  default tablespace users temporary tablespace temp;

2.2 修改用户密码

--语法结构:alter user 用户名 identified by 密码

alter user hope identified by ;

2.3 删除用户

--drop user 用户名【cascade】

drop user hope;

drop user hope cascade;

三 权限和角色

--权限指执行特定类型SQL命令或访问其他对象的权利

--系统权限:允许用户执行某些数据库操作

--对象权限:允许用户对某一特定对象执行特定的操作

--角色是具有名称的一组权限的组合

权限指执行特定类型SQL命令或访问其他对象的权利。创建的新用户是没有任何权限的,甚至连登录的数据库的权限都没有,需要为其指定相应的权限。

权限分为两种:系统权限和对象权限。

1. 系统权限

系统权限:允许用户执行某些数据库操作,如创建表、创建索引、连接实例等。

常见系统权限

权限名

描述

CREATE SESSION

创建会话(具有登录权限)

CREATE TABLE

创建表

DROP TABLE

删除表

CREATE SEQUENCE

创建序列

CREATE USER

创建用户

DROP USER

删除用户

CREATE VIEW

创建视图

权限的分配

grant CREATE SESSION,CREATE TABLE,CREATE USER to 用户名;

权限回收

revoke CREATE SESSION from 用户名;

2.对象权限

对象权限:允许用户对某一特定数据对象执行特定的操作,如读取视图,可更新某些列、执行存储过程等。

对象的拥有者拥有所有权限;对象的拥有者可以向外分配权限。

对象权限

视图

序列

过程

修改(alter)

插入(insert)

删除(delete)

更新(update)

查询(select)

执行(execute)

索引(index)

关联(references)

授权:

grant object_priv|ALL [(columns)]

on object  to {user|role|public}

[WITH GRANT OPTION];

grant all on scott.emp to hope;

收回权限:

revoke object_priv|ALL [(columns)]

on object    from {user|role|public}

PS

1.all包括所有权限;

2. public:用户public是oracle预定义的,每个用户享有这个用户享有的权限,那么就意味将该权限授予了该数据库的所有用户

3. WITH GRANT OPTION  权限的分配是级联的。

--赋予权限和角色
--语法结构:grant 角色1,角色2,。。。 to 用户
grant connect to hope2
grant connect,resource to hope2; --给hope2赋予查询scott的emp表的权限
grant select on scott.emp to hope2;
grant select,update on scott.emp to hope2;
--撤销角色和权限:
--语法结构:revoke 角色1,角色2,。。。from 用户
revoke resource from hope2;
revoke connect,resource from hope2;

3.1 常用系统预定义角色

--CONNECT:临时用户

--RESOURCE:更为可靠和正式的用户

--DBA:数据库管理员角色,拥有管理数据库的最高权限

--一般情况下,普通用户,有connect和resource的角色就够了。

3.2 赋予权限和角色

--语法结构:grant 角色1,角色2,。。。 to 用户

grant connect to hope2

grant connect,resource to hope2;

--给hope2赋予查询scott的emp表的权限

grant select on scott.emp to hope2;

grant select,update on scott.emp to hope2;

--撤销角色和权限:

--语法结构:revoke 角色1,角色2,。。。from 用户

revoke resource from hope2;

revoke connect,resource from hope2;

3.3 常见的预定义角色

(1)connect角色

connect角色具有一般应用开发人员需要的大部分权限,当建立了一个用户后,多数情况下,只要给用户授予connect和resource角色就够了,那么connect角色具有以下系统权限:

alter session、create cluster、create database link、create session、create view、create sequence

这种权限只有在对其他用户的表有访问权时,包括select、insert、update和delete等,才会变得有意义。

(2)resource角色

resource角色具有应用开发人员所需要的其他权限,比如建立存储过程、触发器等。这里需要注意的是resource角色隐含了unlimited tablespace系统权限。

resource角色包含以下系统权限:

create cluster、create indextype、create table、create sequence、create type、create procedure、create trigger

(3)dba角色

dba角色具有所有的系统权限,及with admin option选项,默认的dba用户为sys和system他们可以将任何系统权限授予其他用户。

3.4 自定义角色管理

创建角色:

create role 角色名 [identified by tiger];

删除角色:

drop role 角色名;

3.5 为角色分配权限

权限的分配

grant CREATE SESSION,CREATE TABLE,CREATE USER to 用户名;

grant object_priv|ALL [(columns)]  on   object  to 角色名;

权限回收

revoke CREATE SESSION from 角色;

revoke object_priv|ALL [(columns)]  on  object  from 角色名

SQL> conn system/oracle;
SQL> grant create session to 角色名 with admin option
SQL> conn scott/oracle@orcl;
SQL> grant select on scott.emp to 角色名;
SQL> grant insert, update, delete on scott.emp to 角色名;

角色分配给用户

grant connect, resorce to 用户名 with admin option   //可以传递所获权限。

SQL> conn system/oracle;
SQL> grant 角色名 to blake with admin option;

PS:增加WITH ADMIN OPTION选项,则得到的权限可以传递。

删除角色

SQL> conn system/oracle;
SQL> drop role 角色名;

四 Oracle的数据类型@@

类型

语法

描述

文本类型

char(n)

定长

最大2000字符,默认n=1

varchar2(n)

变长

最大4000字符

nchar(n)

定长

unicode数据类型,最大2000

nvarchar2(n)

变长

unicode数据类型,最大4000

clob(character large Object)

字符型大对象,最大8TB

blob(birnary large Object)

二进制数据,可存放图片、声音,最大8TB

数值

number(p,s)

变长

p-有效位,s-小数位;1<=p<=38,-84<=s<=127

日期

date

默认格式:DD-MM-YYYY ‘16-05月-2017’

timestamp(n)

4.1 文本类型

--char:可以存储定长的字符串  char(200)

--varchar:可以存储变长的字符串

--varchar2:可以存储变长的字符串  varchar2(200)

--什么时候用char,什么时候用varchar(2) @@

当已知字符串长度用char比较合适

--不确定字符串长度时,用varchar2比较合适。

--nchar和nvarchar2可以存储Unicode字符集

4.2 数值类型

--数值数据类型:numer

--number  等价于number(38,0)

--number(15)表示可以存储一个15位的整数

--number(22,7)表示可以浮点数,整数部分有15位,小数点后有7位

--注意:不建议大家使用varchar,integer,float,double

4.2 日期数据类型

--与日期类型相关的函数

--sysdate:日期函数:显示当前日期

select sysdate from dual;

--systimestamp:比Date更精确的一个时间

select systimestamp from dual;

--to_date(字符串,格式):将一个Oracle不认识的字符串,转成Oracle认识的日期格式

select to_date('2018-01-05','yyyy-mm-dd') from dual;

--Date:日期类型,存储日期和时间

--TimeStamp:比Date更精确的一种日期类型。

--默认日期格式:

--中文的Oracle:日-月-年   比如1998年7月1日 ->‘01-7月-1998’

--英文的Oracle:day-mon-year  比如1998年7月1日 ->'01-JUL-1998'

--Lob:

--BLOB:存储二进制对象,如图像、音频和视频文件

--CLOB:存储字符格式的大型对象

五  表

5.1创建表

1.使用sql/plus创建

create  table  表的名称(字段名称1  数据类型, 字段名称2 数据类型…);

示例:

创建学生表,字段和类型如下所示:

字段

字段类型

id

number

name

varchar2(20)

sex

char(2)

birthday

date

score

number(4,2)

create table student(

id number,

name varchar2(20),

sex char(2),

birthday date,

score number(4,2)

)

2.使用plsql developer第三方工具创建

--创建表:实际上解决的是表结构的问题,表有几个字段,每个字段的长度是多少,每个字段是什么数据类型

--create table 表名(字段名1 数据类型1(长度),字段名2 数据类型2(长度),。。。);

create table student(stuno  number(),stuname varchar2(),age number(),addr varchar());

5.2 删除表

drop table student;
--删除表及该表关联的约束
drop table score cascade constraints;

5.3 修改表

1.修改表名

RENAME 旧的表名称 TO 新的表名称;

2. 添加列

ALTER TABLE 表名称 ADD

(列名称 数据类型 [DEFAULT 默认值],

列名称 数据类型 [DEFAULT 默认值],

…);

3.修改列

ALTER TABLE 表名称 MODIFY

(列名称 数据类型 [DEFAULT 默认值],

列名称 数据类型 [DEFAULT 默认值],

…);

4.删除列

alter table 表名 drop column 列名;

alter table 表名 drop(列名1,列名2,...);

5 修改字段名

alter table [表名]  rename column 旧的字段名 to 新的字段名;

6.举例

(1)给学生表添加班级编号

alter table students add(class_id number);

(2)学生姓名变成varchar2(30)

alter table students modify(name varchar2(30));

(3)删除学生表的score字段

alter table students drop column score;

alter table students drop(score);

(4)把学生表名students修改成stu

SQL>rename students to stu;

05-28 21:33