Oracle方案——SQL Server 数据库
一般在实现一个软件工程项目时,用户习惯于把数据存储在一个集中的对象中。
比如:在SQL Server中,针对一个项目,我们一般创建一个数据库
但是在Oracle中一般只有一个数据库,那么在一个数据库中实现不同的项目就
非常不方便。Oracle在组织不同项目中的数据库对象时,使用方案进行区分。
也就是说,创建一个软件项目,在Oracle中不是针对这个项目,创建独立的数据库,
而是为此项目创建一个方案。
什么是方案:某用户拥有的所有的数据库对象的逻辑集合,就叫方案。
方案在名称上和用户名是相同的。
比如有一个Oracle“用户”叫scott,那么,我们一般称Scott用户所拥有的所有数据库
对象的集合叫“方案”
比如表emp,它的所有者是scott,我们引用的方法是:scott.emp
scott.emp:可以称之为:
scott方案中的emp表
也可以称之为
scott用户所拥有的emp表
以上两种说法是等价的,一般不进行区分。
比如数据库DB中有三个方案:a、b、c,每一个方案中都有一个表emp
格式:[[数据库名.]方案名.]对象名
db.a.emp
db.b.emp
db.c.emp
在SQL Server中引用方式:因为在SQL Server中有不同的数据库名a,b,c,
每一个数据库中都有emp表
格式:[[数据库名.]所有者的用户名.]对象名 == [[数据库名.]方案名.]对象名
a.dbo.emp
b.dbo.emp
c.dbo.emp
Oracle中创建方案的方法就是创建用户
Oracle中如何实现方案:
1、(可选)创建表空间
2、创建用户
2、给用户授予合适的权限
3、创建数据库对象(表、视图、索引等)
4、创建数据库应用程序(PL/SQL编程)
===============表空间===========
表空间是什么?
用于存储数据库对象的存储空间
SQL Server中数据存储在一个逻辑对象中——文件组
文件组是数据库中的逻辑对象,实现把不同的物理数据文件
组织在一个对象中,方便引用。
可以把整个表的数据的存储定义到不同的文件组
create table abc.dbo.test
(id int primary key)
on 'mygroup'
指定到文件组,实际上是定位到文件组所对应的多个物理文件
Oracle中,组织不同的物理文件的逻辑对象不叫文件组,叫表空间
表空间是用于在Oracle中组织不同的数据文件的逻辑数据库对象
表空间是有物理数据文件构成的。
创建具有一个数据文件的表空间
create tablespace tp_name
datafile
'路径和文件名' size 大小(文件不能乱删---如果直接删了需重装Oracle)
创建具有一个数据文件的表空间
create tablespace tp_name
datafile
'路径和文件名' size 大小,
'路径和文件名' size 大小,
'路径和文件名' size 大小,...
create tablespace test1
datafile
'c:\test1' size 5m,
'c:\test2.ora' size 5m
在实现项目方案时,表空间是可选的对象,如果用户不创建表空间
那么,系统会给新创建的用户分配系统默认表空间(system)
但是,为了保证项目数据能够高效存储、方便的备份,推荐创建表空间
删除表空间
Drop tablespace tablespace_name [including contents [and datafiles]];
===============方案(用户)===================
如果有可以使用的表空间了,那么就意味着,可以有空间存储用户数据了
下面创建用户:(创建方案)
语法:
create user 用户名 identified by 密码
[default tablespace 表空间名]
[quota 大小 on 表空间名]
[password expire](密码过期)
如果[default tablespace 表空间名]不定义,就使用系统默认表空间
quota 大小 on 表空间名:在指定在"表空间名"所指定的表空间上,用户可以用多少空间
[password expire]:用户在第一次登录时,可以自己更改密码
创建用户:hy密码是password,表空间默认
create user hy identified by password;
创建用户:hy密码是password,表空间为test
create user hy identified by password
default tablespace test
创建用户:hy密码是password,表空间为test
在test上可以用5M空间,密码立即过期
create user hy identified by password
default tablespace test
quota 5m on test
password expire
=================权限===========
Oracle中新创建的用户,是没有任何权限的,即使是登陆也不行
需要给Oracle用户明确授权才能使用
Oracle权限的分类:
系统权限:执行特定的SQL语句的权利
对象权限:访问其他方案对象的权利
系统权限:(由特权用户管理)
create table 权限代表用户可以在自己的方案中创建表(create table)
create any table 权限代表用户可以在任意方案中创建表(create any table)
对象权限:(自己拥有的对象的对象权限不需要授权)(对象的所有者管理)
select :对象的拥有者把对自己的对象的select权限授予其他用户
权限的授予和撤销(grant和revoke):
1、系统权限的授予和撤销:
GRANT 权限1,权限2,... TO
user | role | public [,user | role | public] ...[with admin option]
user:用户名
public:是一个Oracle组,代表所有的Oracle用户 (Windows中的everyone)不推荐使用
--1、授予用户在自己的方案中建立表、视图、过程和函数的权限
GRANT create table,create view,create procedure
TO hy
--2、授予用户scott、hy、hr在任意的方案中建立表、视图、过程和函数的权限
GRANT create any table,
create any view,
create any procedure
TO scott,hy,hr
with admin option:委派授权选项:
如果在授权时使用此选项,说明此用户可以管理此权限,
也就是此用户在自己得到此权限的同时,也可以把此权限授权其他用户
--3、授予用户在自己的方案中建立表、视图、过程和函数的权限,并且可以将权限授予别的用户
GRANT create table,create view,create procedure
TO hy with admin option
如果授权者权限撤销了,那么不会影响其授与的其他用户的权限
A——>B——>C——>D
A权限撤销,B、C、D不会受到影响
Revoke sys_priv [, sys_priv]…
from {user | role | public},[, {user | role | public}]…
2、对象权限的授予和撤销:
GRANT 对象权限1,...,对象权限n
ON 对象名1,...,对象名n
TO user | role | public [,user | role | public] ...
with grant option
对象权限1,...,对象权限n ON 对象名1,...,对象名n
对象权限:根据对象类型不同权限名也不一样
grant select on emp to hy
grant select on proc_name to hy --错误的,因为过程是不能够select操作
grant execute on proc_name to hy --正确的,过程可以具有"执行"权限
给用户hr,在SCOTT方案中对emp表执行select的能力
grant select on scott.emp to hr;
with grant option:对象权限的委派
委派后,权限是级联收回的
A——>B——>C
如果A的权限被撤销,则B、C都会被撤销
Revoke {obj_priv [(column_list)] [,obj_priv [(column_list)] ] … | all [privileges]}
on [schema.]object
from {user | role | public} [, {user | role | public} ]…
Oracle角色:
——权限的集合就是角色
——类似于Windows的组
一般情况,Oracle新的用户没有任何权限(系统、对象),
要给新用户授予系统权限、对象权限,且授权的个数不定
--创建新用户
create user test identified by password
default tablespace hy
quota 10m on hy
--授予登录系统
grant create session to test
--授予表、视图、索引、序列生成器等创建、修改、删除等权限
grant create table,create view,create sequence to test;
。。。
过多的权限设置,增加了新用户设置的复杂性
——使用角色:
——Oracle内置的3个角色:
1、connect:针对Oracle一般用户,诸如登录、创建表等基本权限
2、resource:针对Oracle开发用户,诸如编程、对表空间的无限制使用
3、dba:数据库管理员,对数据库具有最高的管理权限(sysdba)
一般一个新建立用户,只需要授予connect+resource角色即可
Oracle用户自定义角色:
1、公共角色:重点
create role role_name not identified;
2、私有角色:可选的
如果一个私有角色不是用户的默认角色,则用户获得此角色的权限
必须通过输入密码验证后获得。
角色的使用方法:
1、建立角色
create role myrole not identified;
2、给角色授权(向权限的集合中添加权限)
grant create session,create table to myrole;
3、通过角色给用户授权
grant myrole to hr;
——角色的主要作用:简化授权
角色的嵌套:
create role a not identified;
create role b not identified;
create role c not identified;
grant create session to a;
grant create table to b;
grant a,b to c;
grant c to scott;
在Oracle中新建用户最简单的方法:
1、建立用户
2、授予角色(connect,resource)
例:1.create user test identified by password
2.grant connect,resource,create view to test ;