zoukankan      html  css  js  c++  java
  • SQL Server与Oracle对比学习:权限管理(二) 一些有趣的比喻

     

                                                   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中没那么公平,而且没人情味.你挂了房间就被别人拿去用了.
  • 相关阅读:
    web服务器-Apache
    nginx优化
    nginx下载限速
    nginx-URL重写
    HDU 5358 First One 求和(序列求和,优化)
    HDU 5360 Hiking 登山 (优先队列,排序)
    HDU 5353 Average 糖果分配(模拟,图)
    UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
    HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
    HDU 5344 MZL's xor (水题)
  • 原文地址:https://www.cnblogs.com/tc310/p/4504163.html
Copyright © 2011-2022 走看看