http://blog.csdn.net/weiwenhp/article/details/8093661

我们发现我们现在的生活中到处是涉及到密码,你要记各种各样的密码.比如银行卡,邮件,QQ,微博,游戏,各种网站会员.

使用数据库自然也不例外,得先整个用户名和密码才能登进去使用里面的数据啊.虽然也有啥windows验证不用你输密码了,但那实际上也是需要你登陆windwos的用户名和密码.

Oracle权限管理

创建用户

create user arwenidentifiedby abc;   --创建了用户名为arwen密码为abc的用户

如果你要改密码就是

alter userarwenidentifiedby abc123;--把密码改为abc123

shcema与表空间

当然做上面的操作你一般要用个权限较多的用户去做.一般刚开始都是用sys或system用户去创建一些新用户.创立一个新用户的时候同时默认创建一个schema,相当于在表空间中给你分一块空间给你.shcema相当于是一块空间.但由于用户与schema是一一对应而且完全绑定在一起不分开所以也能把它们完全等同.上面创建用户时没指定表空间,系统会处理这种情况.当发现某用户创立时没指定表空间会提供一个默认的表空间,一般是system表空间.但你也可以通过如下语句修改

alter databasedefaulttablespaceusers;

这样一改后前面创建的用户arwen的默认分配的表空间就是users了.当然你还可以创建时显式指定arwen的表空间

create user arwenidentifiedby abc123defaulttablespacesystem;

或者创建完了之后显式更改表空间

alter user arwendefaulttablespace myspace;

等上面的用户建好之后你一看发现竟然登不了.这很不符合常理吧.以前还真没碰到过创建用户成功后竟然不能登陆的.我们一般都是能直接登进去,最多是第一次登的时候被强制要求先改下密码.于是你刚开始会想会不会是新创建的用户被locked住了.像装好Oracle后会默认有一些用户比如scott,是被lock住的.你可以这样解锁

alter user scott accountunlock;

你如果要锁住scott的话自然就是alter user scott accountlock;

但此时的新建用户不是属于这种情况,还是属于没权限.仅仅是连接连接数据库也要需要单独的一个权限.(sql server中是没有这种权限的,创建了用户就直接能连数据库的.等会再讨论为啥oracle要单独整个这权限出来)

赋予系统权限

要连接数据库得有create session的权限.Oracle中每一个连接就叫作一个session(会话).用如下语句赋予权限

grant createsessiontoarwen;

但你这时虽然能登陆了,但登进去发现里面啥都没有,你也啥都不能做,查找不了其他用户的表或自己创建表.当然还有些不存在啥保密的信息你还是能看,比如

select *from v$version; --查看版本信息

那如果要做其他啥事咋整啊,得继续要被赋予权限啊.所以在oracle中差不多没有啥操作是理所当然就能去做的.必须得有一个个的权限了才能去做.Oracle中的权限划分的非常细.虽然这样挺麻烦的,但极大的保证了安全性.

赋予权限一般有两种方式

1.通过grant语句把一个个细分的权限赋予某个用户,就像上面那样用.

很显然如果要赋予用户上百个权限,而同时要创建上百个用户,你一个个的敲得敲得你手发软,于是就有另外一种方法

2.先创建一个角色,然后把各种权限赋予这个角色.然后你创建用户的时候可以把这个角色赋予他.这样新用户就拥有了所有角色的权限.

实际上这有点像面向对象中的继承,子类继承了父类就继承了父类的财产了啊.角色像父类,用户像子类.

创建角色

create role father;

grant create table to father;

grant father to arwen;

上面先创建一个角色father,然后赋予角色建表权限,然后把角色赋给用户arwen.此时arwen也具有了建表权限.我们知道面向对象中父类还能再继承父类.那这里角色还能被赋予角色,比如oracle中默认有角色resource

grant resource to father;

赋予对象权限(object privileges)

大部分时候我们指的权限是系统权限,一般是泛指,范围较广.比如具有建表,查询表的权限啊.而对象权限是从较细的范围讲.比如让你具有对某一个对象(具体的某一个表或视图等的操作权限).

比如有表tmp.则grant select on tmp to arwen.表示arwen具有了访问表tmp的权限,但没权限访问其他任何表.

赋予权限的权限

联级赋予系统权限(with admin option)

看了这么多赋予权限的方式你可能会问难道赋予权限都得sys这样的超级用户去做嘛.那多累啊.自然不是啊.你还可以让其他用户也有赋予别人的权限.举例

先通过sys用户, grant create table to arwen with admin option;--加上with admin option这个修饰就表示arwen也可以把建表的权限接着赋予其他用户了.这是一种具有传递性的赋权方式.而且假如arwen通过grant create table to weiwen赋予用户weiwen建表权限后,如果啥时arwen自己的建表权限被回收了.weiwen的建表权限还在

联级赋予对象权限(with grant option)

另外还有grant select on emp to arwen with grant option; --也跟上面一样表示arwen也可以把查表tmp的权限再接着赋予其他用户

arwen通过grant select on emp to weiwen with grant option;        --与系统权限不同,如果arwen的权限被回收后,weiwen的查表权限也没了.

如果weiwen又通过grant select on emp to test ; --赋权给test.当arwen或weiwen任意一个被取消权限了它也被取消.就像一个继承层次一样.前面的权限被取消了后面的也没了.

回收权限

我们知道赋予了权限肯定还能回收,

很简单,赋予权限是grant ... to ...

回收就是revoke ... from ...

例如revoke create table from arwen;

为什么会有create session权限

关于这个权限很有争议.因为没有这个权限其实也是可以的,而且这权限很容易误导人.比如创建了用户竟然还不能登陆有点不全常理.在sql server中也没有这样的权限.那在oracle中它到底有什么作用呢?

我觉得create session有个蛮重要的作用就是起lock的作用.比如说我们在某些情况想lock住一个用户.像发现用户账号有异常或此用户因某员工离职先暂时lock住.你回收了create session权限就不能连接了,跟lock住的作用完全一样.而且你可以同时回收create session权限和lock住.双保险啊.

另外如果想锁住用户时,你又没lock它的权限时你就只能回收create session了.

SQL Server与Oracle对比学习:权限管理(一)相关推荐

  1. SQL语法范例大全(SQL Server、Oracle 通解)

    [书名]SQL语法范例大全(SQL Server.Oracle 通解) [作者]希赛IT发展研究中心  组编 黄少华,陈翠娥  编著 [ISBN]978-7-121-07396-0 [出版社]电子工业 ...

  2. 『SQL Server 2000 Reporting Services学习笔记』(1)报表管理器的使用 与 通过角色分配配置安全性...

    『SQL Server 2000 Reporting Services学习笔记』(1)报表管理器的使用 与 通过角色分配配置安全性 __________________________________ ...

  3. python数据库管理软件_数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接 - Python社区...

    DataGrip :Jet Brains出品的一款数据库管理工具(没错,是Jet Brains出品,必属精品).DataGrip整合集成了当前主流数据库(如:SQL Server, MySQL, Or ...

  4. SQL Server 和 Oracle 的常用函数对比

    SQL Server 和 Oracle 的常用函数对比 ---------数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1)  value from ...

  5. 数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接

    日常开发中少不了各种可视化数据库管理工具.如果需要同时能连接多种数据库,大家肯定都会想到 DBeaver.Navicat Premium.本文介绍另一个十分好用且强大的工具:DataGrip. Dat ...

  6. SQL Server 和 Oracle 以及 MySQL 的区别

    SQL Server 和 Oracle 以及 MySQL 的区别 历史说明区别 > Oracle: 中文译作甲骨文,成立于1977年,早期的理论基础,反而来自于一篇IBM的论文<A Rel ...

  7. 【java毕业设计】基于java+Eclipse +SQL Server的工厂进销存管理系统设计与实现(毕业论文+程序源码)——工厂进销存管理系统

    基于java+Eclipse +SQL Server的工厂进销存管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Eclipse +SQL Server的工厂进销存管理系统 ...

  8. SQL Server 与 ORACLE 的区别

    sql server 与  oracle的区别:    DBMS 数据库管理系统 1.数据类型不同.   sql server 的数据类型:int ,smallint ,char,varchar,nc ...

  9. SQL Server开发者Oracle快速入门

      本文参考"Beginning SQL: Differences Between SQL Server and Oracle-A Quick Intro for SQL Server Us ...

最新文章

  1. Python 中读取和保存图像方法汇总及其区别
  2. 从零开始用Python构造决策树(附公式、代码)
  3. Jboss RestEasy构建简单的RESTful Web Services示例(1)
  4. 在C#中重新抛出异常的正确方法是什么? [重复]
  5. 修改 IntelliJ IDEA 默认配置路径
  6. 用C#开发的双色球走势图(原创)值得园友拥有(二)接上一篇
  7. OpenLdap 相关命令
  8. mysql connector c 源码_mysql-connector-c-6.1.11-win32
  9. Spring Cloud 入门 之 Zuul 篇(五)
  10. JavaScript 运行机制详解:再谈Event Loop
  11. 20172328《程序设计与数据结构》第三周学习总结
  12. JavaScript 验证统一社会信用代码/营业执照注册号
  13. javashop多用户商城系统源码
  14. [深大深鸿会]利用DevEco Studio从零开发OpenHarmony小游戏——2048(下)
  15. 地学计算方法/地统计学(第四章变异函数理论模型)
  16. 编程、Web前端/后端、游戏开发、嵌入式开发、大数据、人工智能、机器学习需要什么样的笔记本配置?
  17. LoadRunner的函数全集
  18. 2、GIT---时光穿梭机
  19. switch双属性php,thinkphp-条件判断-SWITCH标签
  20. 《善数者成:大数据改变中国》读书笔记3

热门文章

  1. 开课吧:全栈工程师的关键开发技能(硬实力)
  2. C++进阶教程之动态内存
  3. 持续集成实践二之Jenkins与Sonar Qube集成
  4. 认清面向服务架构SOA的真实面目
  5. centos oracle 安装 踩坑实录 (三:踩坑与填坑大全)
  6. 编写一个函数itob(),将整数n转换为以b进制的数,保存到s中
  7. 小话设计模式五:模板方法模式
  8. php 按引用传递的使用
  9. Nginx location
  10. LeetCode 445. Add Two Numbers II