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_ ...
随机推荐
-
JavaScript的全局变量与局部变量解析
一.JavaScript scope 的划分标准是function函数块,不是以 if.while.for来划分的 <script> function f1(){ alert(" ...
-
PHP检测移动设备类mobile detection使用实例
目前,一个网站有多个版本是很正常的,如PC版,3G版,移动版等等.根据不同的浏览设备我们需要定向到不同的版本中.不仅如此,我们有时候还需要根据不同的客户端加载不同的CSS,因此我们需要能够检测浏览设备 ...
-
ios异常(crash)输出
最近突然想起友盟的sdk附带的一个功能:将闪退异常情况上报服务器,(stackflow,github)找了一些资料,自己写了一个demo,想起来好久没有写过blog了,顺便分享. 其实不止是ios,a ...
-
Java类加载器深入探索
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 什么是.class文件? class文件全名称为Java class文件,主要在平台无关性和网 ...
-
win8安装新字体
http://jingyan.baidu.com/article/e3c78d640a7ab33c4c85f52d.html
-
mvn
http://blog.csdn.net/z69183787/article/category/2265961
-
TCP/UDP 协议
传输层建立端口到端口的通信. 网络层的 ip 为我们区分子网,以太网层的 mac 帮我们找到主机.然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,那么我们通过ip和m ...
-
SAP 自定义进度条
*&---------------------------------------------------------------------* *& Report ZCHENH028 ...
-
input type=file 选择图片并且实现预览效果的实例
为大家带来一篇input type=file 选择图片并且实现预览效果的实例. 通过<input />标签,给它指定type类型为file,可提供文件上传: accept:可选择上传类型, ...
-
2013-8-6 10:56:07 JAVA_WEB:员工号自动生成源代码
create table user_info_temp ( usId varchar2(20), usNo varchar2(20), usName varchar ...