1、Oracle数据库表空间与用户的创建,授权说明
Oracle数据库 :全局的概念,一个系统就是一个库;
|-------实例:(orcl):实例就是数据库中创建一个对象,用对象操作数据库;
|----- 表空间 : 表空间是一个逻辑概念,是数据库中划分的一块虚拟区域,用户通过表空间操作真实存储数据的数据文件(.dbf);
|---- 用户: 管理员用户(system),普通用户(scottt),自己创建的一些用户(创建一个用户会给他指定默认的表空间)
上述概念的关系:
一个Oracle数据库中可以存在多个实例;
一个实例中可以创建多个表空间;
一个实例中可以创建多个用户;
一个表空间中可以关联多个数据文件;
一个表空间中可以关联多个用户(要给用户指定一个表空间)
实际开发中:oralce数据库中安装一个数据库实例:一般一个项目创建一个表空间,在表空间中创建多个用户,用户创建自己的表;
[SQL] 纯文本查看 复制代码 /*
创建一个表空间(只有dba用户(system)才能创建表空间)
语法: create tablespace 表空间的名字
datafile '数据文件的绝对位置' -- 指定dbf文件在系统中存放的位置
size 20M --指定 dbf数据文件初始大小
autoextend on -- 指定 数据文件可扩展大小
next 10M -- 每次扩展的大小
*/
--创建表空间(登录 system用户)
create tablespace itheima
datafile 'c:\itheima.dbf'
size 20M
autoextend on
next 10M;
--查询是否创建成功表空间(表空间名必须大写)
SELECT file_name,tablespace_name,bytes,autoextensible
FROM dba_data_files
WHERE tablespace_name='ITHEIMA';
/*
创建用户 (只有dba用户才有创建用户的权限)
语法:create user 用户名 identified by 密码 default tablespace 表空间名
注意点 :(密码不能设置成纯数字的)
创建一个用户会给他指定默认的表空间
*/
--创建用户(system用户登录)
create user zhangxin identified by zhangxin default tablespace itheima;
--查询所有的用户
select * from all_users;
/*
创建成功用户后,用zhangxin去登录数据库,发现无法登录:原因:用户没有登录的权限
结论:新创建的普通用户是没有任何权限的!!!!
*/
-- 给zhangxin用户赋予权限(必须登录dba(system)操作)
-- 赋给zhangxin用户连接数据库的权限
-- 赋予权限的语法: grant 权限操作 to 用户名;
grant create session to zhangxin;
-- 用zhangxin用户登录数据库
-- 查看zhangxin用户拥有的数据库权限,查看当前用户的系统权限(登录zhangxin用户)
select * from user_sys_privs;
-- 用zhangxin用户创建一个表:zhangxin_test(登录zhangxin用户)
--创建 表 zhangxin_test
create table zhangxin_test(
id number(5),
name varchar(10)
);
-- 发现zhangxin用户无法创建表:原因:没有权限
--登录 dba用户(system),给zhangxin用户赋予 创建表的权限
--给zhangxin用户赋予 创建表的权限 :create table (登录 system用户)
grant create table to zhangxin;
-- 给zhangxin用户操作表空间的权限 : unlimited tablespace(登录 system用户操作)
grant unlimited tablespace to zhangxin;
--切换会zhangxin用户,创建表 zhangxin_test(登录zhangxin用户)
--创建 表 zhangxin_test
create table zhangxin_test(
id number(5),
name varchar(10)
);
-- 查询当前用户所有的表 (zhangxin用户操作的)
select * from tabs; -- 已经创建成功 表zhangxin_test
-- zhangxin用户对这张表zhangxin_test 进行操作:
--新增操作
insert into zhangxin_test(id,name) values(1,'test');
commit;
--查询这张表
select * from zhangxin_test;
/*
结论:
用户自己创建的表,拥有其操作表的全部权限;
用户自己创建的表,可以将操作表的权限给其他普通用户;
其他用户的表如果没有给当前用户赋予权限:当前用户没有权限操作;
管理员用户(dba用户)是拥有操作所有表的权限的
不是自己创建的表,操作表的时候要在表前面加上用户名.表名
-- 例子:其他用户查询zhangxin 用户的 zhangxin_test 表的时候;
select * from zhangxin.zhangxin_test;
*/
--验证 用户自己创建的表,可以将操作表的权限给其他普通用户;
-- 登录 zhangxin用户,将zhangxin_test 这张表的查询的权限赋给 scott用户
-- 操作表权限语法: grant select | insert | update | delete on 表名 to 用户;
grant select on zhangxin_test to scott;
-- 登录 scott 用户
-- 发现可以查询 zhang'xin用户下的zhangxin_test;
select * from zhangxin.zhangxin_test;
/*
问题:
创建一个新用户 发现 赋予权限操作太繁杂了?
为什么 scott用户 可以做很多的操作(拥有很多的权限)
解决方案:
Oracle 中提供了角色这个概念,角色:权限的集合(一个角色下有多个权限)
Oracle数据库中已经提供了好多个角色: dba,connect,resource;
*/
--登录 scott用户,查询该用户下有什么角色
--查询当前用户所拥有的角色 -- scott用户拥有两个角色:CONNECT,resource
select * from user_role_privs;
--登录dba用户(system),查询角色下有哪些权限;
--查询RESOURCE 角色下的所有权限(角色名必须大写)
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE'; -- Resource角色下拥有的权限: create table,CREATE SEQUENCE ...
--查询CONNECT角色下的所有权限(角色名必须大写)
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='CONNECT'; -- CONNECT角色下拥有的权限: create session
--给新建用户 赋予这两个角色,就拥有了许多常用的权限(还是不能操作其他人的表)
-- 解除 zhangxin用户 连接数据库的权限
-- 收回权限的语法: revoke 权限操作 from 用户名(system用户操作)
revoke create session from zhangxin;
-- 收回 zhangxin用户 操作表空间的权限(system用户操作)
revoke unlimited tablespace from zhangxin;
-- 收回 zhangxin用户 创建的权限(system用户操作)
revoke create table from zhangxin;
-- system 用户给 zhangxin用户赋予角色: CONNECT,RESOURCE
grant CONNECT, RESOURCE to zhangxin;
-- 登录zhangxin用户
-- 查询当前用户的系统权限(zhangxin用户操作)
select * from user_sys_privs;
-- 查询 当前用户拥有的角色
select * from user_role_privs;
--zhangxin用户创建表 zhangxin_test1 (可以创建表,说明zhangxin用户已经拥有了普通用户的权限)
create table zhangxin_test1(
id number(4),
name varchar(10)
);
-- 查询当前用户拥有的表
select * from tabs;
-- dba用户 删除表空间 以及表空间下的所有的数据文件 (不要直接删除 c盘下的表空间的关联数据文件(itheima.dbf文件))
-- 语法: drop tablespace 表空间名 including contents and datafiles;
--dba用户 删除用户 以及用户下的所有表和其他资源 (千万不要删除 system用户)
-- 语法: drop user 用户名 cascade; |