A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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;

3 个回复

倒序浏览
自己的帖子自己知道写的多辛苦,MB,加油,广州校区最棒
回复 使用道具 举报
加油,顶起我大黑马!

点评

一起加油!!!  发表于 2018-6-5 20:29
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马