首页 > 代码库 > SQL Fundamentals || DCL(Data Control Language) || 系统权限&对象权限管理(GRANT&REVOKE)

SQL Fundamentals || DCL(Data Control Language) || 系统权限&对象权限管理(GRANT&REVOKE)

SQL Fundamentals || Oracle SQL语言

语句

解释

Create user

Creates a user(usually performed by a DBA)

Grant

Gives other users privileges to access the objects

Create role

Creates a collection of privileges, usually performed by a DBA

Alter user

Changes a user‘s password

Revoke

Removes privileges on an object from users

 

通过数据字典查询

数据字典视图

描述

dba_users

用户

dba_ts_quotas

每个用户空间使用配额

dba_profiles

查询profile文件

dba_sys_privs

查询用户权限

dba_roles

查看角色

ROLE_SYS_PRIVS

授予角色的系统权限

ROLE_TAB_PRIVS

授予角色的表权限

USER_ROLE_PRIVS

授予用户的角色

USER_SYS_PRIVS

授予用户的系统权限

USER_TAB_PRIVS_MADE

用户对象上授予的权限

USER_TAB_PRIVS_RECD

授予用户的对象权限

USER_COL_PRIVS_MADE

用户某列上授予的对象权限

USER_COL_PRIVS_RECD

授予用户某列上的对象权限

 

权限管理

  • Oracle系统权限与对象权限的划分;
  • 用户的授权操作GRANT与权限回收REVOKE操作;

 

权限分类

所有的权限应该由DBA进行控制,在SQL语句规范之中针对于权限的控制提供了两个核心的操作命令:

  • GRANT(授权)
  • REVOKE(回收权限)

系统权限

进行数据库资源操作的权限,例如:创建数据表、索引等权限;

系统权限主要指的是资源操作的权限

系统权限是在数据库中执行某种特定操作的权利,系统权限并不针对某个特定的对象,而是针对整个数据库范围。

系统权限针对的是全局用户

例如:数据库管理员(DBA)是数据库系统中级别最高的用户,它拥有一切的系统权限以及各种资源的操作能力。

在Oracle中有100多种的系统权限,并且不同的数据库版本相应的权限数也会增加。

系统规定用户使用数据库的权限。(系统权限是对用户而言)

对象权限

    • TABLEVIEW,Sequence 等为对象,在对象上的权限为对象权限,这个权限不是全局的.系统权限是全局的.
    • 每种对象的权限都不同
    • 对象宿主拥有在对象上全部的权限
    • 对象宿主能授予对象权限给其他用户
    • 对象权限指的是数据库之中某一个对象所拥有的权限,
    • 即:可以通过某一个用户的对象权限,让其他用户来操作本用户中的所有授权的对象。

    维护数据库中对象的能力,即:由一个用户操作另外一个用户的对象。

    对象权限指的是数据库之中某一个对象所拥有的权限

    即:可以通过某一个用户的对象权限,让其他用户来操作本用户中的所有授权的对象。

    Oracle之中一共定义了八种对象权限,分别是:SELECTINSERTUPDATEDELETEEXECUTEALTERINDEXREFERENCES

 

系统权限

系统权限分类:

DBA

拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构

RESOURCE

拥有Resource权限的用户只可以创建对象,不可以创建数据库结构

CONNECT

拥有Connect权限的用户只可以登录oracle,不可以创建对象,不可以创建数据库结构

对于普通用户

授予connect, resource权限。

对于DBA管理用户

授予connect,resource, dba权限

用的系统权限有:

CREATE SESSION  

连接到数据库上

CREATE SEQUENCE  

创建序列,序列是一系列数字,通常用来自动填充主键列

CREATE SYNONYM  

创建同名对象

CREATE TABLE  

创建表

CREATE ANY TABLE  

在任何模式中创建表

DROP TABLE  

删除表

DROP ANY TABLE   

删除任何模式中的表

CREATE PROCEDURE

 创建存储过程

EXECUTE ANY PROCEDURE  

执行任何模式中的存储过程

CREATE USER  

创建用户

DROP USER   

删除用户

CREATE VIEW

创建视图

 

为用户授权

  • 系统权限只能由DBA用户授出:sys,system(最开始只能是这两个用户)
  • 普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。
  • 授权语法:

GRANT 权限 , …

TO [用户名 , … | 角色名 , …. | PUBLIC]

[WITH ADMIN OPTION] ;

  • 语法解释:

权限:

主要指的是各个系统权限

TO:

设置授予权限的用户、角色或者是使用PUBLIC将此权限设置为公共权限;

WITH ADMIN OPTION:

将用户授予的权限继续授予其他用户则得到的权限可以传递。

 

  • 范例

c##wendy用户授予CREATE SESSION权限,这样用户就可以登录了.

GRANT CREATE SESSION TO c##wendy ;

c##wendy用户授权;

12C以前的oracle版本在授权后需要重新登录,只有登录时会取权限。

12C是动态取得权限.

GRANT CREATE TABLE , CREATE SEQUENCE , CREATE VIEW TO c##wendy WITH ADMIN OPTION ;

利用c##wendy用户登录,而后将创建表、以及创建序列的权限授予c##gaga用户

GRANT CREATE TABLE , CREATE SEQUENCE TO c##gaga ;

 

撤消权限

  • 撤消权限语法:

REVOKE 权限 , ... FROM 用户名 ;

  • 范例

c##wendy用户的CREATE VIEWCREATE TABLE权限回收

REVOKE CREATE TABLE , CREATE VIEW FROM c##wendy;

通过c##wendy用户回收c##gaga用户的CREATE SEQUENCE权限

REVOKE CREATE SEQUENCE FROM c##gaga ;

说明:

1)如果使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。

2)系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。

 

对象权限

  • Oracle之中一共定义了八种对象权限,分别是:SELECTINSERTUPDATEDELETEEXECUTEALTERINDEXREFERENCES

 

对象权限

表(Table

序列(Sequence

视图(View

子程序(Procedure

查询(SELECT)

 

增加(INSERT)

 

 

更新(UPDATE)

 

 

删除(DELETE)

 

 

执行(EXECUTE)

 

 

 

修改(ALTER)

 

索引(INDEX)

 

 

关联(REFERENCES)

 

 

 

 

授予对象权限

  • GRANT 对象权限 | ALL [( , ...)]

ON 对象

TO [用户名 | 角色名 | PUBLIC]

[WITH GRANT OPTION] ;

语法组成:

对象权限

指的是表所列出的权限标记,如果设置为ALL表示所有对象权限;

ON

要授予权限的对象名称;

TO

将此权限授予的用户名称或角色名称,如果设置为PUBLIC表示为公共权限;

WITH GRANT OPTION:

允许授权用户继续授权其他用户。

  • 范例

c##wendy用户授予c##scott用户dept表的查询以及增加权限

GRANT SELECT , INSERT ON c##scott.dept TO c##wendy ;

c##scott.dept数据表更新部门编号(dname)的权限授予c##wendy用户

GRANT UPDATE(dname) ON c##scott.dept TO c##wendy ;

允许系统上的所有用户从wendyt表中查询数据:

GRANT select

ON         wendy.t

TO          PUBLIC;

将表的操作权限授予全体用户:

grant all on product to public//public 表示所有的用户

从数据字典中查询当前用户授权权限.

SELECT * FROM user_tab_privs_recd;

 

回收对象权限

  • 如果要对对象权限进行回收,则继续使用REVOKE语句完成。

REVOKE [权限 , .... | ALL]

ON 对象

FROM [用户 , .... | 角色 | PUBLIC] ;

  • 回收c##scott.dept上的相关权限

REVOKE SELECT , INSERT ON c##scott.dept FROM c##wendy ;

REVOKE UPDATE ON c##scott.dept FROM c##wendy ;

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

 

 

SQL Fundamentals || DCL(Data Control Language) || 系统权限&对象权限管理(GRANT&REVOKE)