OCP认证考试指南(7):管理数据库用户(2)

1、系统权限

Oracle 10G中常见的系统权限

权限说明
CREATE SESSION允许被授权者连接数据库实例。
CREATE TABLE允许被授权者在自己的模式中创建表。
CREATE VIEW允许被授权者在自己的模式中创建视图。
CREATE SYNONYM允许被授权者在自己的模式中创建私有的同义词。
CREATE PUBLIC SYSNONYM允许被授权者在SYS模式中创建同义词,数据库中所有用户都能使用这个同义词(公有同义词)。
CREATE PROCEDURE允许被授权者在自己的模式中创建存储过程或函数。
CREATE SEQUENCE允许被授权者在自己的模式中创建序列。
CREATE TRIGGER允许被授权者在自己的模式中创建触发器。
CREATE USER允许被授权者在数据库内创建另一个用户,并且在创建用户时指定口令与其他设置。
ALTER USER允许被授权者能够修改数据库中另一个用户的用户信息,包括更改该用户的口令。
DROP ANY TABLE允许被授权者删除数据库内任何模式中的任何表。
ALTER ANY TABLE允许被授权者更改数据库内任何模式中的任何表。
BACKUP ANY TABLE允许被授权者使用Export实用程序生成数据库内任何表的一个副本。
SELECT ANY TABLE无论是否显式地授予被授权者对数据库内的任何表执行SELECT语句的权限,都允许被授权者执行上述行为。
INSERT ANY TABLE无论是否显式地授予被授权者对数据库内的任何表执行INSERT语句的权限,都允许被授权者执行上述行为。
UPDATE ANY TABLE无论是否显式地授予被授权者对数据库内的任何表执行UPDATE语句的权限,都允许被授权者执行上述行为。
DELETE ANY TABLE无论是否显式地授予被授权者对数据库内的任何表执行DELETE语句的权限,都允许被授权者执行上述行为。

1.1、授予系统权限

指派系统权限的语法如下:

GRANT privilege [, privilege, ...]
TO username [, username, ...]
[WITH ADMIN OPTION];

可以看到,可以同时为多个用户授予多个权限,并且,被授予的权限是用户来说是立刻可以使用的。再来复习一次原来所学的吧,呵呵。

SQL> create user dandan identified by dandan1982
  2  default tablespace mydemo
  3  temporary tablespace mydemotemp
  4  quota 10M on mydemo;
 
User created.
 
SQL> grant create session, create table
  2  to dandan;
 
Grant succeeded.
 
SQL> conn dandan/dandan1982
Connected.
 
SQL> create table test (
  2  tid int,
  3  tname varchar2(20));
 
Table created.

1.2、WITH ADMIN OPTION权限

一个用户被授予某个系统权限时,授权者也可以选择允许被授权者将相同的权限授予其他用户。如果希望进行这样的操作,那么授权者可以使用WITH ADMIN OPTION授予权限。

1.3、取消系统权限

取消系统权限的REVOKE命令与授予系统权限的命令具有类似的语法:

REVOKE privilege [, privilege, ...]
TO username [, username, ...];

注意:使用WITH ADMIN OPTION为某个用户授予权限,如果这个用户为其他用户授予相同的权限,无法取消授予这些用户的该权限,也可以说是不会级联取消。

1.4、确定被授予的系统权限

我们可以通过查询DBA_SYS_PRIVS和USER_SYS_PRIVS数据字典视图来了解被授予的系统权限。

SQL> conn / as sysdba
Connected.
SQL> select * from dba_sys_privs
  2  where grantee = 'DANDAN';
 
SQL> conn dandan/dandan1982
Connected.
SQL> select * from user_sys_privs;

2、对象权限

2.1、授予对象权限

授予对象权限的语法:

GRANT privilege [, privilege, ...] | ALL [(column[, column, ...])]
ON objectname
TO user | role | PUBLIC
[WITH ADMIN OPTION];

对象权限由对象的拥有者授予。

对象权限及其授予对象

对象权限授予对象
SELECTTABLE、VIEW、SEQUENCE
INSERTTABLE、VIEW
UPDATETABLE、VIEW
DELETETABLE、VIEW
ALTERTABLE、VIEW
INDEXTABLE
REFERENCESTABLE
EXECUTEPROCEDURE、FUNCTION、PACKAGE

2.2、WITH ADMIN OPTION权限

与授予系统权限所使用的WITH ADMIN OPTION相似,如果使用WITH GRANT OPTION授予对象权限,那么就允许被授予这个权限的用户向其他用户授予该权限。

2.3、取消对象权限

取消对象权限的语法与授予对象权限的语法相似:

REVOKE privilege [, privilege, ...] | ALL [(column[, column, ...])]
ON objectname
TO user | role | PUBLIC
[WITH ADMIN OPTION];

注意:如果取消某个用户的对象权限,那么对于这个用户使用WITH ADMIN OPTION授予权限的用户来说,同样还会取消这些用户的相同权限,也就是说取消授权是级联的。

2.4、确定被授予孤对象权限

通过查询数据字典能够确定为某个用户授予的对象权限或被这个用户授予的权限:

  • USER_TAB_PRIVS_MADE视图:某个用户授予其他用户在该用户模式对象上的对象权限。
  • USER_TAB_PRIVS_RECD视图:为某个用户授予的,在其他模式对象上的权限。
  • ALL_TAB_PRIVS_MADE视图:某个用户授予其他用户在该用户模式对象与其他模式对象上的对象权限。
  • ALL_TAB_PRIVS_RECD视图:为某个用户授予的,在该用户模式对象与其他模式对象上的权限。
  • USER_COL_PRIVS_MADE视图:某个用户授予其他用户在其模式中表上的列权限。
  • USER_COL_PRIVS_RECD视图:为某个用户授予的,在其他模式中表上的列权限。
  • ALL_COL_PRIVS_MADE视图:某个用户授予其他用户在该用户模式中表上与在其他模式中表上的列权限。
  • ALL_COL_PRIVS_MADE视图:为某个用户授予的,在该用户模式中表上与在其他模式中表上的列权限。

在这里,把上面的所有理论都练习一下,也验证一下这些理论的真伪。

#################################################
# 连接打开数据库,准备进行操作
#################################################
$ sqlplus / as sysdba
 
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Sep 23 22:00:37 2008
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
Connected to an idle instance.
 
SQL> startup
ORACLE instance started.
 
Total System Global Area  264241152 bytes
Fixed Size                  1218868 bytes
Variable Size              71304908 bytes
Database Buffers          188743680 bytes
Redo Buffers                2973696 bytes
Database mounted.
Database opened.
 
#################################################
# 创建3个表空间
#################################################
 
SQL> create tablespace ats
  2  datafile '/ora02/oradata/ocp/ats.dbf' size 5M;
 
Tablespace created.
 
SQL> create tablespace bts
  2  datafile '/ora02/oradata/ocp/bts.dbf' size 5M;
 
Tablespace created.
 
SQL> create tablespace cts
  2  datafile '/ora02/oradata/ocp/cts.dbf' size 5M;
 
Tablespace created.
 
#################################################
# 创建3个用户
#################################################
 
SQL> create user a identified by a123
  2  default tablespace ats
  3  profile default;
 
User created.
 
SQL> create user b identified by b123
  2  default tablespace bts
  3  quota 5M on bts
  4  profile default;
 
User created.
 
SQL> create user c identified by c123
  2  default tablespace cts
  3  quota 5M on cts
  4  profile default;
 
User created.
 
#################################################
# 给c用户授权,给a用户授权并加上WITH ADMIN OPTION
#################################################
 
SQL> grant create session,create table to c;
 
Grant succeeded.
 
SQL> grant create session, create table to a
  2  with admin option;
 
Grant succeeded.
 
#################################################
# 分别连接a用户和c用户,可以发现,加了WITH ADMIN OPTION的效果不一样
#################################################
 
SQL> conn c/c123
Connected.
SQL> grant create session to b;
grant create session
*
ERROR at line 1:
ORA-01031: insufficient privileges
 
SQL> conn a/a123
Connected.
SQL> grant create session to b;
 
Grant succeeded.
 
#################################################
# 我自己做个测试,给b用户WITH ADMIN OPTION权限,这里可以测试出2问题
# 1、确定当a用户被取消权限时,b用户依然有权限
# 2、发现要能给别人授权,授权控制要在一个语句中,比如说CREATE SESSION不能给别人
#################################################
 
SQL> grant create table to b
  2  with admin option;
 
Grant succeeded.
 
SQL> conn / as sysdba
Connected.
SQL> revoke create session, create table from a;
 
Revoke succeeded.
 
SQL> conn b/b123
Connected.
SQL> grant create session, create table to a;
grant create session, create table
*
ERROR at line 1:
ORA-01031: insufficient privileges
 
SQL> grant create table to a;
 
Grant succeeded.
 
#################################################
# 下面是对象权限了,c用户在自己模式下建ct表,SELECT to a
#################################################
 
SQL> conn c/c123
Connected.
SQL> create table ct (
  2  cid int,
  3  cname varchar2(20));
 
Table created.
 
SQL> grant select on ct to a
  2  with grant option;
 
Grant succeeded.
 
#################################################
# 以SYSDBA身份登录后,要做的是新建用户并授权连接权限
# a用户没有CREATE SESSION权限了,在这里加上
#################################################
 
SQL> conn / as sysdba
Connected.
 
SQL> grant create session to a;
 
Grant succeeded.
 
SQL> create user d identified by d123;
 
User created.
 
SQL> grant create session to d;
 
Grant succeeded.
 
#################################################
# 以a用户登录授权给d,SELECT to d,再以a、d用户分别执行查询c.ct表的命令
#################################################
 
SQL> conn a/a123
Connected.
SQL> grant select on c.ct to d
  2  with grant option;
 
Grant succeeded.
 
SQL> select * from c.ct;
 
no rows selected
 
SQL> conn d/d123
Connected.
SQL> select * from c.ct;
 
no rows selected
 
#################################################
# c用户取消a用户的权限,同时d用户也没有权限了
#################################################
 
SQL> conn c/c123
Connected.
SQL> revoke select on ct from a;
 
Revoke succeeded.
 
SQL> conn a/a123
Connected.
SQL> select * from c.ct;
select * from c.ct
                *
ERROR at line 1:
ORA-00942: table or view does not exist
 
 
SQL> conn d/d123
Connected.
SQL> select * from c.ct;
select * from c.ct
                *
ERROR at line 1:
ORA-00942: table or view does not exist

实践出真知,光有理论没用啊,不过我们经过练习测试,发现理论都还是对的,呵。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值