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_ ...
随机推荐
- iOS --- 取整数
Objective-C拓展了C,自然很多用法是和C一致的.比如浮点数转化成整数,就有以下四种情况. 1.简单粗暴,直接转化 float f = 1.5; int a; a = (int)f; NSLo ...
- App - 版本控制
/** 版本判断 ***/ NSString *versionKey = @"CFBundleVersion"; // 上一次使用版本号(存储在沙盒中的版本号) NSString ...
- nutch http file 截断问题
问题: 列表页预计抽取 355+6 但实际只抽取到220条链接. 原因是nutch对http下载的内容的长度进行了限制. 解决方案:这里将这个属性扩大10倍. vim conf/nutch-defal ...
- ReactEurope Conf 参会感想
React 带来的革命性创新是前端世界过去几年最激动人心的变化.自从接触 React 以来,我深信 React 会改变客户端开发者(包括前端.iOS 和 Android)的开发体验.这次在巴黎举办的 ...
- poj 1132
暑假集训做的第一个题,模拟,挺简单的,不过要细心点... 没什么好说的,直接贴代码: #include<cstdio> #include<cstring> using name ...
- Discuz!X3.1 全新安装图文教程
http://www.discuz.net/thread-3456887-1-1.html
- Gdi+实用入门
大部分是参照其它资料,然后加以自己的理解,那是什么,总结.算不得什么教程.......汗,自己看着就行了..如果别人能看那就更好了. 首先下载GDI+文件包,一个动态链接库,使用GDI+就是调用那个动 ...
- 为什么手机连接wifi会显示已停用?
1.通常导致手机连接WiFi显示“已停用”故障的原因是由于无线路由器“安全模式”设置不当造成的,对此我们可以通过以下方法来解决: 2.根据无线路由器背面的信息(包括路由器IP地址,登陆用户名和密码), ...
- ajax 初始化请求前携带参数
$(function () { function SetAjax(wxOpenId, departCode) { $.ajaxSetup({ xhrF ...
- windows桌面添加右键环境
1.组合键win + R,输入regedit,回车 打开注册表编辑器 2.找到目录中[HKEY_CLASSES_ROOT\Directory\Background\shell]对其右键,新建一个项 ...