Oracle中用户权限管理 数据类型和表的创建

一,Oracle的用户管理

1. 创建用户

在 oracle 中要创建一个新的用户使用 create user 语句,一般是具有 dba(数据库管理员)的权限才能使用。

  1. 1) 创建用户

    命令:create user  用户名 identified by  密码;
    1
    2
    3
    4
    5
    --创建用户:
    --语法结构:create user 用户名 identified by 密码 【default tablespace 表空间名】【temporary tablespace temp】
    create user hope identified by 123456;
    create user hope1 identified by 123456 default tablespace users;
    create user hope2 identified by 123456 default tablespace users temporary tablespace temp;
  2. 2) 给用户修改密码

    如果给别人修改密码则需要具有 dba 的权限,或是拥有 alter user 的
    系统权限命令:alter user 用户名 identified by 新密码

1
2
3
--修改用户密码:
--语法结构:alter user 用户名 identified by 密码
alter user hope identified by 654321;
  1. 3) 修改自己的密码

    如果给自己修改密码可以直接使用命令:password 用户名
    问题:创建好的用户无法正常登录?

    oracle 中用户建立后是无法正常登录的,只有在数据库管理员(DBA)对用户分配相应的权限后,用户才可以登录。

2 删除用户

概述:一般以 dba 的身份去删除某个用户,如果用其它用户去删除用户则需要具有 drop user 的权限。
命令:drop user 用户名 [cascade]可选参数 cascade
在删除用户时, 注意: 如果要删除的用户,已经创建了表, 那么就需要在删除的时候
带一个参数 cascade; Cascade 有级联的作用

1
2
3
4
--删除用户:
--drop user 用户名【cascade】
drop user hope;
drop user hope cascade;

3. oracle 用户分配权限和角色

概述:创建的新用户是没有任何权限的,甚至连登录的数据库的权限都没有,需要为其指定相应的权限。给一个用户赋权限使用使令 grant,回收权限使用命令 revoke

赋权限基本语法:grant 权限/角色 to 用户名;
回收权限基本语法:revoke 权限/角色 from 用户名;

--权限和角色

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

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

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

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

--常用系统预定义角色

--CONNECT:临时用户

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

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

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

3.1 分配权限

语法:grant create 权限 to 用户名;
例如:给小明赋予会话的权限
sql> grant create session to xiaoming;
–给hope2赋予查询scott的emp表的权限

1
2
grant select on scott.emp to hope2;
grant select,update on scott.emp to hope2;

3.2 分配角色

也可以按 角色对用户分配权限
语法:grant 角色名 to 用户名;
例如:授予小明 resource 角色

1
2
3
4
5
sql> grant resource to xiaoming;
--赋予权限和角色
--语法结构:grant 角色1,角色2,。。。 to 用户
grant connect to hope2
grant connect,resource to hope2;

撤销角色和权限:

1
2
3
--语法结构:revoke 角色1,角色2,。。。from 用户
revoke resource from hope2;
revoke connect,resource from hope2;

3.3 oracle 中权限的概念

权限分为系统权限与对象权限。

系统权限 :是数据库管理相关的权限:
create session(登录权限)
create table(创建表权限)
create index(创建索引权限)
create view(创建视图权限)
create sequence(创建序列权限)
create trriger(创建触发器权限)

对象权限:
是用户操作数据对象相关的权限。
比如对表的增删改查(insert 增、delete 删、update 改、select 查);

3.4 角色

在 oracle 中角色分为:预定义角色和自定义角色;

预定义角色:把常用的权限集中起来,形成角色。常见的角色有:dba、connect、resource
等;

connnect 角色 :是授予用户的最基本的权利,能够连接到 oralce 数据库中,并在对其
他用户的表有访问权限时,做 SELECT、UPDATE、INSERTT 等操作。Create session–建立
会话;Alter session–修改会话;Create view–建立视图。Create sequence–建立序列等权限

resource 角色 :具有创建表、序列、视图等权限。Create table–建表;Create trigger–
建立促发器;Create procedure–建立过程;Create sequence—建立序列;Create type–建立类
型等权限;

dba 角色 :是授予系统管理员的,拥有该角色的用户就能成为系统管理员了,它拥有
所有的系统权限。
自定义角色:按需定制一定权限形成角色,可以作为预定义角色的补充。来满足用户的
需求。

二,Oracle 数据类型

1 、 char(size)

存放字符串,它最大可以存放 2000 个字符,是定长。可以存储定长的字符串

1
例子:create table test1(name char(32));
说明:
test1 表中的 name 字段最多存放 32 个字符,
不足 32 个字符 oracle 会用空格补齐,如果超过会报错。

2 、 varchar 可以存储变长的字符串(不太常用)

2—— varchar2(size)
存放字符串,它最大可以存放 4000 个字符,是变长。
举例说明:

1
2
create table test2(name varchar2(16));
//test2 表中的 name 字段最多存放 16 个字符,实际有几个字符就占几个字符的空间,如果超过会报错。
注意:如果我们的数据的长度是固定的,比如编号(8 位),最好使用 char 来存放,因为这样存取的速度
区别:::
什么时候用char 什么时候用varchar(2); ??
  当已知字符串的长度的时候用char比较合适,不确定字符串长度时,用varchar2比较合适
-----nchar和nvarchar2可以存储Unicode字符集

3 、 number 型

存放整数,也可存放小数,是变长。number(p,s)//p 代表整个位数,s 代表小数位
说明:
number(5,2): 表示一个小数有 5 位有效数,2 位小数。范围-999.99~999.99
如果数值超出了位数限制就会被截取多余的位数。但在一行数据中的这个字段输入 575.316,则真正保
存到字段中的数值是 575.32。
number(5) : 等价于 number(5,0) 表示一个五位整数,范围-99999~99999。
输入 57523.316,真正保存的数据是 57523
–number 等价于number(38,0)
–number(15)表示可以存储一个15位的整数
–number(22,7)表示可以浮点数,整数部分有15位,小数点后有7位

注意:不建议使用varchar,interger,float,double

4,日期数据类型,date 类型

date类型,用于表示时间,( 年/ 月/ 日/ 时/ 分/ 秒) ,是定长。
sysdate:日期函数;显示当前日期
            select systate from dual;    //显示当前日期
 systimestamp:比Date更精确的一个时间
Date:日期类型,存储日期和时间
TimeStamp:比Date更精确的一种日期类型。
默认的日期格式
      ---中文的oracle:日-月-年  比如:‘1998年7月1日’    默认日期格式-> ‘01-7月-1998’
      ---英文的oracle:day-mon-year  比如1998年7月1日  默认日期格式->'01-JUL-1998'

与日期相关的函数
to_date(字符串,格式) :将一个oracle不认识的日期格式转成oracle认识的日期格式返回的是一个日期类型
select to_date(‘2018-01-05’,yyyy-mm-dd);

1
2
3
4
5
6
7
举例说明:
create table test5(birthday date);
//添加时个要使用默认格式 insert into test5 values('11-11 月-11');
如使用 insert into test5 values('2011-11-11');则报错。
说明:oracle 日期有默认格式为:DD-MON-YYYY,日-月-年;如果我们希望使用自己习惯的日期添加,
也可以,但是需要借助 oracle 函数来添加。
insert into test5 values(to_date('2015-5-3','yyyy-mm-dd'))

5 、 clob 型

字符型大对象,它最大可以存放 8TB ,是变长。(nvarchar(4000) 满足不了需求)
与字符型的 char/varchar2/nchar/nvarchar2 的使用方式一样。

6 、 blob 型

二进制数据,可存放图片、声音,它最大可以存放 8TB ,是变长。
与字符型的 char/varchar2/nchar/nvarchar2 的使用方式一样。
说明:一般情况下很少使用数据库来存放媒体类文件,一般只使用数据库来记录媒体类文件的 URL 地址。如果考虑到文件的安全性,可以存放到数据库中来保存。

三、表的操作

1.创建表:
实际上解决的是表结构的问题,表有几个字段,每个字段的长度是多少。
语法:
create table 表的名称(字段名称 1 数据类型, 字段名称 2 数据类型);

1
2
3
4
5
6
7
8
举例:创建学生表,字段和类型如下所示:
字段 字段类型 说明
id 整型 number
name 字符型 varchar2
sex 字符型 char(2)
brithday 日期型 date
score 小数型 number(3,1)
resume(简历) 大文本型 clob

代码

1
2
3
4
5
6
7
8
9
10
create table students(
id number,
name varchar2(64),
sex char(2),
brithday date,
score number(3,1),
resume clob
)
create table student(stuno number(4) primary key,stuname varchar2(10),age number(2),addr varchar(50));
insert into student values(1001,'zhang',18,'luoyang');

删除表:

1
drop table student;

2.6. 案例:( 掌握创建约束 )(商店售货系统 )

举例说明:
商店售货系统表设计案例 :

1
2
3
4
5
6
7
8
9
10
11
现有一个商店的数据库,记录客户及其购物情况,由下面三个表组成:
商品 goods 表:
商品号 goodsId(主键),商品名 goodsName(非空),
单价 price(大于零),商品类别 category,供应商 provider;
客户 customer:
客户号 customerId(主键),姓名 name(非空),住址 address,
邮箱 email,性别 sex(默认男,check),身份证 cardId(唯一);
购买 purchase :
客户号 customerId(外键),商品号 goodsId(外键),
购买数量 nums(130 个);
请用 SQL 语言完成下列功能:
  1. 建表,在定义中要求声明:
    (1).每个表的主外键;
    (2).客户的姓名不能为空值;
    (3).单价必须大于 0,购买数量必须在 1 到 30 之间;
    (4).邮箱不能够重复;
    (5).客户的性别必须是 男 或者 女,默认是男;

 商品表:

1
2
3
4
5
6
7
8
9
10
11
商品 goods  表:
商品编号:goodsId 商品名称:goodsName
单价:price 商品类别:category
供应商:provider
代码:
create table goods(goodsId number primary key,
goodsName varchar2(36),
price number check(price>0),
category varchar2(64),
provider varchar2(64)
);

 客户 表:

1
2
3
4
5
6
7
8
9
10
11
12
      客户 customer  表:
客户编号:customerId 姓名:name ,
住址:address 邮箱:email ,
性别:sex 身份证:idCard
代码:
create table customer(customerId number primary key,
name varchar2(32) not null,
address varchar2(64),
email varchar2(64) unique,
sex char(2) default' 男' check(sex in(' 男',' 女')),
idCard varchar2(20)
);

 购买表:

1
2
3
4
5
6
7
8
9
购买 purchase  表:
客户 编 号 :customerId 商品编号:goodsId
购买数量 :nums
代码:
create table purchase(customerId number references customer(customerId),
goodsId number references goods(goodsId),
nums number check(nums>=1 and nums<=30),
primary key(customerId,goodsId)
);

本文标题:Oracle中用户权限管理 数据类型和表的创建

文章作者:雷凯博

发布时间:2018年02月10日 - 13:02

最后更新:2021年05月16日 - 19:05

原始链接:http://yoursite.com/2018/02/10/2018-02-10-Oracle%E4%B8%AD%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90%E7%AE%A1%E7%90%86-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%92%8C%E8%A1%A8%E7%9A%84%E5%88%9B%E5%BB%BA/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!
-------------本文结束感谢您的阅读-------------
0%