--创建使用同义词
--同义词就是给表、视图等对象取得别名,用于简化对其的访问
--分为2种:
--私有同义词:用户自己创建自己使用的
--公共同义词:dba创建,给其它用户使用的
--为dept_sum_vu视图创建一个同义词
--不使用public关键字创建的同义词就叫做私有同义词
create synonym d_sum for dept_sum_vu;
--通过同义词访问视图
select * from d_sum;
--SQL 错误: ORA-01031:权限不足
create public synonym hremp1 for employees;
--以下操作由sys操作
--为hr的copy_emp表创建公共同义词
create public synonym hrcemp1 for hr.copy_emp;
--将访问同义词的权限给所有用户
grant select on hrcemp1 to public;
--权限控制:
--schema是表、视图、序列等对象的集合。
--schema被一个数据库用户拥有并且和用户有相同的名字。
--以下操作由sys完成
--创建新用户
create user demo identified by demo;
--授予demo登录到数据库的权限
grant create session to demo;
--授予demo创建各种对象的权限
grant create table,create view,create sequence,create procedure to demo;
--为了简化权限管理,使用角色
--1、创建角色
create role manager;
--2、给角色授权
grant create table,create view to manager;
--3、将角色授给用户,那么用户就拥有了角色拥有的权限
grant manager to demo;
--修改自己的口令
--由hr操作
alter user hr identified by hr;
--授予对象权限给其它用户
--将hr的dept80表的查询权限授给demo
grant select on dept80 to demo;
--将hr的dept80表的last_name和annsal列的修改权限授给demo
grant update(last_name,annsal) on dept80 to demo;
--授权时使用with grant option选项
--它的含义是:允许被授权的用户继续将同样的权限授给其它用户
--以下由sys操作
create user demo1 identified by demo1;
grant create session to demo1;
--以下由hr操作
grant select on dept80 to demo with grant option;
--以下由demo操作
grant select on hr.dept80 to demo1 with grant option;
----以下由hr操作
--查询数据字典得到有关权限的信息
DESC role_sys_privs;
--查看角色具备的系统权限
select * from role_sys_privs;
--查看自己把哪些对象的访问权限授给了哪些用户
select * from user_tab_privs_made;
--查看其它用户把哪些对象的访问权限授给了自己
select * from user_tab_privs_recd;
--废除对象权限
revoke select on dept80 from demo;
--注意:demo通过传递授权授给demo1的访问hr的dept80
--表的权限同时被废除。
--系统权限也可以进行传递授权,使用with admin option选项
--废除系统权限时,通过传递授权授予的系统权限不会被同时废除
--管理schema对象
--使用alter table语句添加、修改、删除列
bonus number constraint bonus_ck
--给表添加一个新的列
--1)不能指定列要出现在哪里。新列成为最后的列。
--2)当添加列时,如果表中已经包含了行,对所有的行来讲,
--新的列被初始化为null,或者赋予默认值。
--给dept80表添加一个job_id列
alter table dept80 add (job_id varchar2(9));
alter table dept80 add (job_id1 varchar2(9) default 'abc');
--2、alter table...modify:
--修改表中已有列的定义
--列修改包括改变列的数据类型、大小和默认值。
--可增加数字列的宽度或精度
--可增加字符列的宽度
--可减少列的宽度,如果:
-- 列只包含null值
-- 表没有行
-- 减少列宽度不少于列中已有的值
--如果列中只包含null值可改变数据类型。
--列的默认值的改变只影响后续插入的行
--将dept80表的last_name列的宽度增加到30
alter table dept80 modify (last_name varchar2(30));
--将dep