SQL Fundamentals || DCL(Data Control Language) || 系统权限&对象权限管理(GRANT&REVOKE)
|
语句 |
解释 |
|
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多种的系统权限,并且不同的数据库版本相应的权限数也会增加。 系统规定用户使用数据库的权限。(系统权限是对用户而言) |
|
对象权限 |
维护数据库中对象的能力,即:由一个用户操作另外一个用户的对象。 对象权限指的是数据库之中某一个对象所拥有的权限, 即:可以通过某一个用户的对象权限,让其他用户来操作本用户中的所有授权的对象。 在Oracle之中一共定义了八种对象权限,分别是:SELECT、INSERT、UPDATE、DELETE、EXECUTE、ALTER、INDEX、REFERENCES。 |
系统权限
系统权限分类:
|
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 VIEW、CREATE 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之中一共定义了八种对象权限,分别是:SELECT、INSERT、UPDATE、DELETE、EXECUTE、ALTER、INDEX、REFERENCES。
|
对象权限 |
表(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 ; |
|
允许系统上的所有用户从wendy的t表中查询数据: |
|
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)的更多相关文章
- SQL Fundamentals || DCL(Data Control Language) || 角色ROLES
SQL Fundamentals || Oracle SQL语言 语句 解释 Create user Creates a user(usually performed by a DBA) Grant ...
- SQL Fundamentals || DCL(Data Control Language) || 用户管理&Profile概要文件
SQL Fundamentals || Oracle SQL语言 语句 解释 Create user Creates a user(usually performed by a DBA) Grant ...
- 在CDS(Core Data Services)中使用DCL(Data Control Language)
最近,我在玩ABAP CDS视图,并且遇到了一些权限方面的挑战.我在网上没看到有多少有关CDS开发的文档,因为它是个相当新的东西.因此,我决定写下这篇博客,也许我的想法可以帮助到一些人. 和你已经意识 ...
- 【HICP Gauss】数据库 数据库管理(文件 用户管理 系统权限 对象权限 profile)-7
数据库运行 依赖不同类型的文件 ,数据文件 参数文件 控制文件 redo日志文件 运行日志文件 审计日志文件等 数据文件 就是表空间文件 存储数据库的数据文件 参数文件 用户修改的配置信息 控制文件 ...
- Oracle_系统和对象权限管理
授予系统权限: GRANT { system_privilege | role } [,{ system_privilege | role }]... ... TO {user | role | PU ...
- MYSQL用户权限管理(Grant,Revoke)
MySQL可以为不同的用户分配严格的.复杂的权限.这些操作大多都可以用SQL指令Grant(分配权限)和Revoke(回收权限)来实现. Grant可以把指定的权限分配给特定的用户,如果这个用户不存在 ...
- mysql 权限管理 grant revoke
grant all privileges on database.table to 'user'@'ip' identified by 'passwd' with grant option; g ...
- SQL Fundamentals || Oracle SQL语言
对于SQL语言,有两个组成部分: DML(data manipulation language) 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据 ...
- Chapter 3 Protecting the Data(1):理解权限
原文出处:http://blog.csdn.net/dba_huangzj/article/details/39548665,专题目录:http://blog.csdn.net/dba_huangzj ...
随机推荐
- SpringMVC由浅入深day01_5注解的处理器映射器和适配器
5 注解的处理器映射器和适配器 在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandle ...
- MySQL---循环语句
mysql 操作同样有循环语句操作,网上说有3中标准的循环方式: while 循环 . loop 循环和repeat循环.还有一种非标准的循环: goto. 鉴于goto 语句的跳跃性会造成使用的的思 ...
- Python对象(上)
Python是一门面向对象的语言,在Python中一切都是对象,函数是对象,类型也是对象. 下面就看看Python中对象相关的内容. Python对象基本概念 Python对象有三个基本的要素: 身份 ...
- wee hours
前言: 程序员问科比:“你为什么这么成功? ” 科比:“你知道凌晨四点的城市是什么样子吗?” 程序员:“知道,一般那个时候我还在写代码,怎么了?” 科比:“没事了……” 说起程序员,可能很多人脑中会蹦 ...
- IDEA maven项目下测试mybatis例子,使用mappper class或package引入mapper映射文件,总是报错Invalid bound statement(所有配置完全正确)
困扰几个小时,终于查到解决办法及原因(可以直接到最后看解决方案) 环境就是用IDEA搭建的maven项目,主要jar包引入配置如下 <dependencies> <dependenc ...
- Spring4 Quartz2 动态任务,Spring4整合quartz2.2.3简单动态任务
Spring4 Quartz2 动态任务 Spring4整合quartz2.2.3简单动态任务, Quartz2.2.3简单动态定时任务二, SimpleScheduleBuilder简单定时任务 ...
- [PyCharm] 设置自动启动时自动打开项目
设置启动PyCharm时自动打开(或不打开)上次进行的项目: 选择 “Settings - General - Reopen last project on startup”,勾选该选项则启动时自动打 ...
- flask操作mongo两种方式--ORM
#manage.py #coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 ...
- 使用node新建一个socket服务器连接Telnet客户端并且进行输入的显示
最近在看node的socket,这个很有趣,这个可以很清晰的得到网络http请求的一个过程.首先我们需要一个Telnet的客户端,node(博主为8.0+版本) Telnet客户端的开启过程 有的系统 ...
- 有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?
本文转载至 http://www.cnblogs.com/ios122/p/4832859.html Apple 算是最重视应用开发体验的公司了.从Xib到StoryBoard,从Auto Layou ...