SQL Server与Oracle对比学习:权限管理(二) 一些有趣的比喻
http://blog.csdn.net/weiwenhp/article/details/8094739
SQL Server权限管理
login 与user的区别
我玩惯了Oracle刚一来玩SQL Server就被login 和user这样的概念搞的有点迷糊了.因为Oracle中没有这样的区分.就一个用户登进去,然后自己创建了啥表等对象就保存在自个的用户下面.别人想访问你用户下的表得需要额外权限,你要访问其他用户下面的表也要额外权限.所以一切泾渭分明,条理清晰,一目了然.当然这样你用户理解起来简单了,爽了.但也会在数据权限控制的操作上变得不灵活.比如你需要访问某其他用户的哪一部分表的权限,只能一个个表的赋权限,如果有一百个表你就得用100条sql就赋予权限.而sql server中由于用户和schema完全分离的两个概念,可以把那些表放到某个schema下面,然后让某个用户可以访问这个schema就行了.
当你用Oracle的时候刚开始肯定先create 一个user.然后就可以登陆了.结果跑sql server里面一看发现,你根本没法create一个user然后给个密码.因为sql server里面实际上只能用login来登陆.而且单独的login也没法用,你一登进去里面是空的,啥的没有.
database是大院子,schema是其中小房间.login可以有不同的大院子的钥匙,user有不同的小房间的钥匙
我们创建login时可以映射多个database给它.一个database相当于一个大院子吧(我本来是喜欢用仓库来比喻的,但看到其他人这样形容,也抄袭来用用),你创建login时映射很多databse,相当于给了你很多院子大门的钥匙.你闲着没事可以一个个的大门去打开看下.但是财物(数据)都是保存在院子里的房间里,你还没有房间的钥匙.你就相当于是个看大门的.当然有些schema(房间),如果owner指明为public,也就是公共的财物.这样的房子没锁门,你可以随便进去拿.只有传说中的共_产主义社会才会财产公有的.正常情况没这样的好事啊.所以大部分时候房间都锁上.
扯淡了这么一堆,你可能会想那我到底怎么去知道房间的锁?此时需要创建一个user,这里的user就不需要你再创建密码了.然后指定user的owned shcemas.相当于给user一个或几个房间的钥匙.在创建user的时候你还要指定user是属于哪个login. 所以login与user是一对多的关系,一个login可以有很多user.打个不恰当的比方.login像男人,而user像女人.一个男人可以有很多老婆的啊.有些国家是这样的.如果是中国嘛你就等同可以搞二奶三奶啥的了.当然如果一个login对应多个user时,那些user不能在同一个databse下,也就是不能在同一个院子.比如你要找二奶的话也不敢明目张胆的让她们住一起吧.肯定得金屋藏娇,藏远点,放另外哪的大院子里去,其实也可以把大院子看成大别墅了啊.
而且大部分时候都是男人做主.所以登陆数据库时用login就行了.当然我说的比喻不一定恰当,可能你会觉得实际上也可以是女的是login,男的是user.一个女的如果够风流的话也可以搞很多男的啊.哎反正是比喻嘛,咋整都行.
闲扯了这么多,这会等来点实际的,看具体咋操作的.
create login boy with password = 'sb123' use mydb; --创建login名boy,然后指定一个databse mydb给他.相当于给大院子mydb的钥匙给他.
那接下来怎么创建user呢?
先登陆到数据库mydb,然后create user girl for login boy.
不过再指定些schema给user挺麻烦的.还是简单点用Management studio这个图形界面的工具操作吧.
database是mydb(这个是我自己创的mydb,你也可以指定其他的了).那你从图形界面上要先找到那个database,然后在它在树形结构下面会看到有users的选项.你右击选new user.你会发现在创建login并指定某个database时系统会默认创建一个名字相同的user,你右击user boy,然后查看properties.再在owned schemas中选项你想把那些schemas给这个user(给很多房间钥匙给user)
绕了这么一大圈,总算把一个用户给建好啊.麻烦虽然是麻烦.不过这样的话就比较全球做精细的权限管理啊.
角色(role)
我们知道Oracle中有角色的概念.sql server中也有.而且用法相差不大,没有上面创建用户区别那么大.
在sql server中你创建用户时要指定它拥有的schema,得一个个指定挺麻烦.你可以先创建一个role,指定此role拥有哪些schema.然后创建用户时把这个角色role赋给用户就行了.当然了现在我谈的只是啥database,schema这样的逻辑的存储空间的使用权概念.实际上还有其他对表等对象的操作权限还没谈到.
赋予权限
比如要给database mydb下面的user girl赋予建表的权限.这里要注意一点的是,不同的数据库下面的user是不同的概念.假如mydb下面有个user叫girl.在testdb下面还有个user才叫girl.他们都对应login boy.那么对不同的database下面的user girl赋予权限是不影响另外的user girl的.
所以先登陆到database mydb.然后grant create table to girl; --ok,给用户girl赋予好权限了.
用比喻来对比Oracle 与SQL Server
其实要区分oracle和sql server关于database和schema , login 与user这样混淆的概念.还是来打几个比喻吧
Oracle的世界
可以这样来理解.oracle中你装好一个server后,就只有一个database,相当于一个大院子,然后院子里有很多小房间,也就是schema.而每个人(user)只能有一个房间(schema).一一对应的,如果那人死了,他的房间也给拆掉.由于刚建好数据库时只有默认的sys,scott,system等几个少数的用户,所以院子(database)中就只有sys,scott,system这几个房间,其他是空地.当你创建一个用户后,假如是用户arwen,那就在院子里建一个房间,房间名就叫arwen.不停的建新用户就不停的建新房间.假如用户arwen同志因啥意外壮烈牺牲了,比如走椰子树下被掉下来的一个椰子砸死了.(这样死有点死得冤啊.),那数据库中就删除用户arwen,然后把大院子里叫arwen的房间(schema)也拆了.房间里的遗物啥的全部烧掉.
SQL Server的世界
实际上装好一个sql server后,可以在里面整很多个databse,而且它就这样明目张胆的叫databse,有很多个.而不像oracle就一个.(当然实际上database实际上只是个逻辑概念.在物理上就是几个数据文件.像oracle中一个database也可以有很多个数据文件的). 假如sql server中也只有一个database的话就跟oracle很像了.database是大院子,但没有user的时候你也可以先建很多个房间(schema),然后等创建了一个user时,假如创建user arwen,可以分一个或几个房间给arwen.如果arwen虽然天天在打酱油但极会拍马屁,很受领导赏识.于是升官了.然后可以再多分几个房间(schema)给arwen. 假如哪天arwen同志又因意外挂掉了.这次假如是闲得蛋痛跑楼顶去玩,结果一失足摔下去摔成肉酱了.结果很多人认为arwen同志工作太努力,压力太大,想不开自杀了啊.于是哀悼叹息了一阵子.领导们把arwen的名字删掉了.但他的房间还在,遗物还在.过了几天又来了哥们叫weiwen.并且接arwen的班.于是领导们把之前arwen的房间中的某几个分给weiwen.当然里面的遗物自然还在.
而不管arwen还是weiwen都只是些小罗罗,打打酱油的.开啥会时也只当当听众,给领导们鼓鼓掌.啥意思一般也只能被领导给代表了.user只能使用一个大院子(database中的小房间),而那些大领导们可以拥有不同的院子里的房间.假如有某领导(login)名为SB,他有两个职员ss和bb.这两个职员在不同的地方.假如ss在大院子db1中,有一个房间,而bb在另一个大院子db2中.有两个房间. 于是领导SB就有三个房间的拥有权了.因为他的职员的财产也就是他的.可以随时回收的.
于是我们发现oracle的世界比较公平点,每个人一个房间.你死了还拿房间给你陪葬了.虽然浪费点,但多有人情味啊.而sql server中没那么公平,而且没人情味.你挂了房间就被别人拿去用了.
SQL Server与Oracle对比学习:权限管理(二) 一些有趣的比喻的更多相关文章
- SQL Server与Oracle对比学习:权限管理(一)
http://blog.csdn.net/weiwenhp/article/details/8093661 我们发现我们现在的生活中到处是涉及到密码,你要记各种各样的密码.比如银行卡,邮件,QQ,微博 ...
- SQL Server与Oracle对比学习:表的管理和组织
http://blog.csdn.net/weiwenhp/article/details/8088979 我们知道数据库,顾名思义.最重要的东东就是管理数据,而数据在系统中主要是保存在表(table ...
- 数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接
前言 DataGrip:Jet Brains出品的一款数据库管理工具(没错,是Jet Brains出品,必属精品).DataGrip整合集成了当前主流数据库(如:SQL Server, MySQL, ...
- 【转】SQL Server、Oracle、MySQL和Vertica数据库常用函数对比
SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 1. 绝对值 S:select abs(-1) valu ...
- Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决
Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决 I. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity ...
- 使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务
使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务 作者:Nikolay Manchev 分步构建一个跨这些平台的 ...
- ASP.NET 连接 SQL Server 和 Oracle 教程
临近期末,有很多同学都问我怎么关于ASP.NET 连接 SQL Server 和 Oracle 的问题.由于人太多了,我也不能一一去帮忙,就写了这篇博客.希望对大家有用处. 首先,前期准备是要安装数据 ...
- 数据库 --> SQL Server 和 Oracle 以及 MySQL 区别
SQL Server 和 Oracle 以及 MySQL 区别 三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非 ...
- SQL Server中通用数据库角色权限处理
SQL Server中通用数据库角色权限处理 最近和同事在做数据库权限清理的事情,主要是删除一些账号:取消一些账号的较大的权限等,例如,有一些有db_owner权限,我们取消账号的数据库角色db_ ...
随机推荐
- JAVA NIO之Character Set
明白以下几个概念: 字母集(Character Set),汉字,特殊符号,字母这些都是字符集: 字符编码集(Coded character set),将字符集的字符使用数字进行编码:比如ASCII,就 ...
- 【Python网络爬虫三】 爬去网页新闻
学弟又一个自然语言处理的项目,需要在网上爬一些文章,然后进行分词,刚好牛客这周的是从一个html中找到正文,就实践了一下.写了一个爬门户网站新闻的程序 需求: 从门户网站爬取新闻,将新闻标题,作者,时 ...
- AppStore 审核中文版 --- 程序员必看
App Store审核指南中文版(2014.10.11更新) 2014-11-03 程序猿 苹果在9月3日对App Store审核指南进行了重大更新,新添加了扩展.HealthKit.HomeKit以 ...
- RegexKitLite 使用详解
1.去RegexKitLite下载类库,解压出来会有一个例子包及2个文件,其实用到的就这2个文件,添加到工程中. 2.工程中添加libicucore.dylib frameworks. 友情提醒:一般 ...
- 【技术帖】解决 Hudson jenkins 连接等待中 - Waiting for next av
今天构建项目发现如下问题: jenkins 连接等待中 - Waiting for next available executor 左下角那块一直不运行构建,一直在连接等待. 于是,进入一级页面, 右 ...
- php 文件下载 以及 file_exists找不到文件的解决方案
链接:<a href="upload/file/download.php?filename=雨人工作室.doc" target="_blank" > ...
- 【HDU 1542】Atlantis 矩形面积并(线段树,扫描法)
[题目] Atlantis Problem Description There are several ancient Greek texts that contain descriptions of ...
- java向文件写数据的3种方式
下边列举出了三种向文件中写入数据的方式,当然还有其他方式,帮助自己理解文件写入类的继承关系.类的关系: file->fileoutputstream->outputstreamWriter ...
- 不重复查询mysql
select EquipmentSID,MIN(MatureTime),MIN(ISlock) from table group by name String sql =” Select * from ...
- [转贴]WebService的简单实现 C++
WebService的简单实现 一.socket主机创建和使用过程 1.socket()//创建套接字 2.Setsockopt()//将套接字属性设置为允许和特定地点绑定 3.Bind()//将套接 ...