用户及权限
权限有两大类:
系统权限
对象权限
刚创建的用户没有任何权限,得分配一定的权限后,该用户才能使用。
系统权限:
对用户和角色有100多个不同的可用系统权限,系统权限由数据库管理员提供。介绍几个典型的:
create user 授予人可以创建其它oracle用户的权限(需要有DBA角色的权限)
drop user 授予人可以删除用户的权限
drop any table 授予人可以删除在任意方案中的表
backup any table 授予人导出实用程序可以备份在任何方案中的任何表
select any table 授予人可以查询在任何方案中的表、视图或快照
create any table 授予人可以在任何方案中创建表
创建用户:
DBA通过create user语句来创建用户,但是新创建的用户没有任何权限。DBA可以给用户授予权限,这些权限决定用户能够在数据库级别做啥工作!
创建用户的语句很简单:create user jocky identified by jch.2813!
授权系统权限:
语法:
grant privilege,[privilege2...] to user,[user2|role,public...]
先来了解几种常见的权限
create session 连接到数据库;
create table 在用户的方案中创建表;
create sequence 在用户的方案中创建序列;
create view 在用户的方案中创建视图;
create procedure 在用户的方案中创建存储过程、函数或包;
当前会话的系统权限可以在字典视图session_privs中找到。
授权范例:
grant create session,create table,create sequence,create view to jocky;
SQL> connect jocky/jch2813;
Connected.
SQL> show user;
USER is "JOCKY"
角色
角色是多个权限的组合,作用是方便权限的管理。
角色可以包含角色,也就是角色可以嵌套;将角色授予某个用户后,用户将可使用角色中的所有权限。
一个用户可以使用多个角色,并且几个用户也可以被指定相同的角色。
使用角色时,DBA首先要创建好角色,然后才能跟配角色给角色或者用户。
创建角色的语法:
create role rolename;
SQL> show user;
USER is "SYS"
SQL> create role jocky;
Role created.
SQL> drop role jocky;
Role dropped.
范例:
SQL> create user jocky identified by jichunhui2813;
User created.
SQL> create role manager;
Role created.
SQL> grant create session,create table,create view to manager;
Grant succeeded.
SQL> grant manager to jocky;
Grant succeeded.
SQL> show user;
USER is "SYS"
SQL> connect jocky/jichunhui2813;
Connected.
SQL> show user;
USER is "JOCKY"
SQL> connect / as sysdba;
Connected.
SQL> drop user jocky cascade;
User dropped.
SQL> drop role manager;
Role dropped.
对象的维护
1:改变口令
2:对象权限的意义
3:授权对象权限
4:with grant option和public
5:确认授权的权限
6:撤销对象权限
改变口令:
语法:
alter user jocky identified by jichunhui2813;
SQL> create user jocky identified by jch2813;
User created.
SQL> alter user jocky identified by jichunhui2813;
User altered.
而为了你能够改变任何其它的选项,你必须得拥有alter user权限。范例:
对象权限的意义:
对象权限是在指定的表、视图、序列或过程上执行指定动作的权限或权利。每个对象都有一个特殊的可授予的权限集。不同的对象权限对于不同类型的方案对象是有用的,一个用户自动拥有包含在该用户的方案中的所有对象的权限,一个用户可以授予该用户所拥有的任何方案对象上任何对象权限给另一个用户或者角色。
而如果授权包括with grant option选项,那么,得到权限的用户可以再将权限授予其它用户;否则,被授权者可以使用权限,但是不能授予其它用户权限。
授权对象权限的语法:
grant object_priv[(columns)] on object to {user|role|public} [with grant option];
说明:
object_priv 是将被授予的对象权限
all 指定所有对象权限
columns 从一个表或视图中指定被授予权限的列
on object 是权限被授予的对象
to 指定权限被授予谁
public 授予权限给所有用户
一些对象所对应的可用的对象权限:
table: alter/delete/index/insert/references/select/update
view: delete/insert/references/select/update
sequence: alter/select
procedure: execute
范例:
SQL> create user jocky identified by jichunhui2813;
User created.
SQL> grant create session to jocky;
Grant succeeded.
SQL> connect jocky/jichunhui2813;
Connected.
SQL> show user;
USER is "JOCKY"
SQL> connect / as sysdba;
Connected.
SQL> create role jocky;
create role jocky
*
ERROR at line 1:
ORA-01921: role name 'JOCKY' conflicts with another user or role name
SQL> create role jichunhui;
Role created.
SQL> show user;
USER is "SYS"
SQL> connect scott/jocky;
Connected.
SQL> show user;
USER is "SCOTT"
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
DEPT TABLE
EMP TABLE
BONUS TABLE
SALGRADE TABLE
JOCKY TABLE
SQL> grant select on jocky to jocky;
Grant succeeded.
SQL> connect jocky/jichunhui2813;
Connected.
SQL> show user;
USER is "JOCKY"
SQL> select * from scott.jocky;
ID NAME SEX MAIL SALARY
---------- ---------- ----- ------------------------- ----------
1 jocky man 10000
2 mike man 6000
3 john woman 4800
4 blues man 7500
5 write woman 6500
范例二:
SQL> show user;
USER is "SCOTT"
SQL> grant update (name,mail) on jocky to jocky,jichunhui;
Grant succeeded.
with grant option和Public
当授予者的权限被撤消时,用with grant option子句授予的对象权限也被撤消。
如果一个语句不用对象的全名,oracle服务器隐式的用当前的用户名作为前缀。例如:如果用户scott查询jocky表,系统将从scott.jocky表中做查询工作。
如果一个语句不用对象的全名,并且当前用户不拥有该名字的对象,系统将用public作为对象名的前缀。例如,如果用户scott查询user_objects表,但scott不拥有该表,系统将用public.user_objects公共同义词的方法从数据字典视图中进行选择。
范例:
grant select,insert on jocky to jocky with grant option;
grant select on jocky to public;
确认已授予的权限:
如果你不清楚自己的身份拥有什么样的权限,那就去查看下面的一些视图吧:
role_sys_privs 授予角色的系统权限
role_tab_privs 授予角色的表权限
user_role_privs 可由用户访问的角色
user_tab_privs_made 授予用户的对象上的对象权限
user_tab_privs_reco 授予用户的对象权限
user_col_privs_made 授予用户对象的列上的对象权限
user_col_privs_reco 授予用户在指定列上的对象权限
user_sys_privs 授予用户的系统权限
撤销对象权限:
可以用revoke语句撤消授予其他用户的对象权限。
语法:
revoke {privilege[,privilege2...]|all} on object from {user[,user2...]|role|public} [cascade constraints];
cascade constraints用于删除任何与该对象相关的约束和对象,例如索引、触发器、权限、完整性约束等。
范例:
revoke select,insert on jocky from jocky,jichunhui;
如果一个用户被用with grant option子句授予权限,那么,该用户可以用with grant option子句授予权限给其他用户,所以可能产生一个很长的链,但是这个链子是不可以被循环的。如果所有者从撤销了一个用户的权限,那么所有授予的权限将联级的别撤销。
数据库链接
使用数据库链接可以访问其他数据库中的数据
数据库链接可以用来构建分布式数据库
一个数据库链接是一个指针,该指针定义一条从oracle数据库服务器到另一个数据库服务器的通信路径。链接指针实际上在一个数据字典中被定义为一个条目,为了访问该链接,你必须被链接到包含数据字典条目的本地数据库。一个数据库链接是一条有感知的路径,一个客户可以通过该路径连接到本地数据库A,再用存储在数据库A中的链接访问数据库B中的信息。但连接到数据库B的用户不能使用同一个链接来访问数据库A中的数据,必须定义一个连接,并存储在数据库B的数据字典中。
字典视图user_db_links包含有关用户可以访问的链接信息。
范例:
create public database link hq.acme.com using 'sales';
select * from ;
删除一个数据链接
drop database link hq.acme.com;
阅读(2111) | 评论(0) | 转发(0) |