Oracle中用户权限管理 数据类型和表的创建
一,Oracle的用户管理
1. 创建用户
在 oracle 中要创建一个新的用户使用 create user 语句,一般是具有 dba(数据库管理员)的权限才能使用。
-
1) 创建用户
命令:create user 用户名 identified by 密码;
--创建用户:
--语法结构: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) 给用户修改密码
如果给别人修改密码则需要具有 dba 的权限,或是拥有 alter user 的
系统权限命令:alter user 用户名 identified by 新密码
--修改用户密码:
--语法结构:alter user 用户名 identified by 密码
alter user hope identified by 654321;
-
3) 修改自己的密码
如果给自己修改密码可以直接使用命令:password 用户名
问题:创建好的用户无法正常登录?
oracle 中用户建立后是无法正常登录的,只有在数据库管理员(DBA)对用户分配相应的权限后,用户才可以登录。
2 删除用户
概述:一般以 dba 的身份去删除某个用户,如果用其它用户去删除用户则需要具有 drop user 的权限。
命令:drop user 用户名 [cascade]可选参数 cascade
在删除用户时, 注意: 如果要删除的用户,已经创建了表, 那么就需要在删除的时候
带一个参数 cascade; Cascade 有级联的作用
--删除用户:
--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表的权限
grant select on scott.emp to hope2;
grant select,update on scott.emp to hope2;
3.2 分配角色
也可以按 角色对用户分配权限
语法:grant 角色名 to 用户名;
例如:授予小明 resource 角色
sql> grant resource to xiaoming;
--赋予权限和角色
--语法结构:grant 角色1,角色2,。。。 to 用户
grant connect to hope2
grant connect,resource to hope2;
撤销角色和权限:
--语法结构: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 个字符,是定长。可以存储定长的字符串
例子:create table test1(name char(32));
说明:
test1 表中的 name 字段最多存放 32 个字符,
不足 32 个字符 oracle 会用空格补齐,如果超过会报错。
2 、 varchar 可以存储变长的字符串(不太常用)
2------ varchar2(size)
存放字符串,它最大可以存放 4000 个字符,是变长。
举例说明:
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);
举例说明:
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 数据类型);
举例:创建学生表,字段和类型如下所示:
字段 字段类型 说明
id 整型 number
name 字符型 varchar2
sex 字符型 char(2)
brithday 日期型 date
score 小数型 number(3,1)
resume(简历) 大文本型 clob
代码
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');
删除表:
drop table student;
2.6. 案例:( 掌握创建约束 )(商店售货系统 )
举例说明:
商店售货系统表设计案例 :
现有一个商店的数据库,记录客户及其购物情况,由下面三个表组成:
商品 goods 表:
商品号 goodsId(主键),商品名 goodsName(非空),
单价 price(大于零),商品类别 category,供应商 provider;
客户 customer:
客户号 customerId(主键),姓名 name(非空),住址 address,
邮箱 email,性别 sex(默认男,check),身份证 cardId(唯一);
购买 purchase :
客户号 customerId(外键),商品号 goodsId(外键),
购买数量 nums(1 到 30 个);
请用 SQL 语言完成下列功能:
- 建表,在定义中要求声明:
(1).每个表的主外键;
(2).客户的姓名不能为空值;
(3).单价必须大于 0,购买数量必须在 1 到 30 之间;
(4).邮箱不能够重复;
(5).客户的性别必须是 男 或者 女,默认是男;
商品表:
商品 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)
);
客户 表:
客户 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)
);
购买表:
购买 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)
);
本文地址:https://blog.csdn.net/Leo1120178518/article/details/85915235