Oracle 11g学习笔记–特权
系统特权
系统特权允许用户在数据库中执行特定的操作;
常用的系统特权如表
系统特权 | 允许执行的操作 |
---|---|
create session | 连接到数据上 |
create sequence | 创建序列 |
create synonym | 创建同名对象 |
create table | 在用户模式中创建表 |
create any table | 在任何模式中创建表 |
drop table | 删除用户模式中的表 |
drop table | 删除任何模式中的表 |
create procedure | 创建存储过程 |
execute any procedure | 执行任何模式中的存储过程 |
create user | 创建用户 |
drop user | 删除用户 |
create view | 创建视图 |
注释:
序列:一系列数字,通常用来自动填充主键列。
视图:视图是存储的过程,可以用来对多个表和多列进行访问,然后就可以查询表一样查询视图;
--授权
--with admin option 的意思是授权用户可以继续将自己的权限授予其他用户
grant create session, execute any procedure to uer_name with admin option;
--授权给所有人
grant create session to public;
检查授予用户的系统特权
select *from user_sys_privs;
撤销用户的系统特权
--从user_name上撤销create table的特权
revoke create table from user_name;
对象特权
对象特权允许用户对数据库对象执行的特定操作,如DML语句;
向用户授予对象特权
--授权给user_name,允许对products表进行select, insert, update 等操作;
grant select , insert, update on store.products to user_name;
--将更新t表column_name的权限给u2;
grant update(column_name) on u1.t to u2;
检查已授予的对象特权
通过查询user_tab_privs_made可以检查某个用户对哪些表向其他用户开放了那些对象特权;
user_tab_privs_made的部分列
列 | 类型 | 说明 |
---|---|---|
grantee | varchar2(30) | 该特权所授予的用户 |
table_name | varchar2(30) | 所授予的特权所操作的对象 |
grantor | varchar2(30) | 授权者 |
privilege | varchar2(30) | 对该对象授予的特权 |
grantable | varcahr2(3) | 特权所授予的用户是否可以将这种特权在授予给其他用户,该值等于yes或者no |
hierarchy | varchar(3) | 特权是否构成层次关系。该值等于yes或者no |
检查已接受的对象特权
通过user_tab_privs_recd表可以查询某个用户被授予了哪些表上的哪些特权;
列 | 类型 | 说明 |
---|---|---|
owner | varchar(30) | 拥有该对象的用户 |
table_name | varchar(30) | 所授予的特权所操作的对象名 |
grantor | varchar(30) | 授权者 |
privilege | varchar(40) | 对该对象授予的特权 |
grantable | varchar(3) | 特权所有与的用户是否可以将这种特权再授予其他用户,该值等于yes或no |
hierarchy | varchar(3) | 特权是否构成层次关系,该值等于yes或no |
通过user_col_privs_recd可以检查某个用户被授予了哪些列的对象特权。
列 | 类型 | 说明 |
---|---|---|
owner | varchar(30) | 拥有该对象的用户 |
table_name | varchar(30) | 所授予的特权所操作的对象名 |
column_name | 所授予的特权所操作的列名 | |
grantor | varcahr(30) | 授权者 |
privilege | varchar(40) | 对该对象授予的特权 |
grantable | varchar(3) | 特权所授予的用户是否可以将这种特权再授予给其他用户 |
使用对象特权
当一个用户要访问另一个用户的表时,需要加上用户名:
select *from user_name.table_name;
同名对象
所谓的同名对象就相当于代号,如你可能访问某个用户的表同上面的方式一样;但是创建了同名对象之后,你就可以不用输入用户名了,直接输入别名就好了,使用方法如下:
注意:此处,假设用户user1要访问user2的friends 表, 当然前提是你得有访问该用户表的权限;
●授权
connect sys/admin as sysdba;
grant create synonym to user1;
●创建同名对象
connect user2/password
create synonym his_friends for user2.frineds;
select * from his_friends;
●销毁同名对象
drop synonym his friends;
公共同名对象
我们也可以为表创建公共同名对象,在创建公共同名对象之后,所有的用户都可以看到这个同名对象。
使用步骤:
●授权
connect sys/admin as sysdba
grant create public synonym to user1;
●创建公共同名对象
connect user1/admin
create public synonym his_friends for user1.friends;
●使用(注意:此时user2必须有访问user1的friends表的权限)
connect user2/admin
select *from his_friends;
撤销用户的对象特权
同撤销其他权限一样,依然使用revoke
connect user1/admin
revoke select on user2.table_name from user1;