Login

Login 是Server一级的概念,表示登录Server的凭证,比如在Server_A上有一个数据库DA,那么想要访问数据库DA,第一步要做的事情就是先登录到Hosting该数据库的Server_A上,数据库管理员可以用下面的T-SQL语句来创建一个Login,暂且命名为ReportLogin。

  • Windows Authentication:

Create login [ReportLogin] from windows with default_database = [master],default_language = [us_english]

  • SQL Server Authentication:

Create login [ReportLogin] with password = 'abc***123456abc',default_database = [master],default_language = [us_english]

按照上面的语句创建 SQL Server验证的[ReportLogin]为强制密码策略,默认数据库为master,默认语言为英语,Server roles为public,user mapping中为默认的public,securables为当前服务器,权限设设置为可以连接SQL并查看Any Database,赋予它连接数据库权限的是sa.

安装完数据库软件后,会有一些预创建的Login,比较著名的就是sa和BuildIn/Administrators。

user

有了一个Login,表明你可以登录hosting该Database的Server,并不表明你能够访问数据库,除非你是内置的Windows管理员,否则,你只能登录到该Server上,什么事情都做不了,就好比,你有了一个私家小院的大门钥匙(Login),你打开大门(登录),你只能在院子里边站着,因为房间的门都是锁着的,你没有房间的钥匙(User)啊,怎样才能进到屋子里边去呢?User就是要完成这样的功能。我们可以用下边的T-SQL语句来创建一个User,暂且命名为ReportUser,由于User属于数据库对象,不属于Server对象(Login属于Server对象),因此我们如果想创建一个User,首先必须进入到想创建User的数据库中(use 该数据库),然后创建User。

create user [ReportUser] for login [ReportLogin] with default_schema = ReportSchema

go
   注:最后面的default_schema是指定服务器为此数据库用户解析对象名时将搜索的第一个架构。 
    通过语句我们可以看出来,每一个User都要映射到一个Login,所以这里的关系就是:

·         每个User必须对应一个Login。

·         每个Login可以对应多个User,前提是User在不同的数据库中。

一旦我们创建了映射到某个Login的User,那么此时,如果我们用该Login登录,就可以访问拥有该User的数据库了,继续打比方,我们用Login打开了大门,我们进入了小院子,此时我们还有一个User,就表明我们手上还有某个房间门的钥匙,那么此时我们可以打开房间门(数据库),堂而皇之地进入到这个小房间了。

安装完数据库软件后,会有一些预创建的User,比较著名的就是dbo,guest,sys等等。

Schema

九牛二虎之力之后,我们终于如愿以偿地进入到我们的房间了,却发现原来里边都是上下铺,究竟那个床(Schema)才是我的呢?我能把我的行李放在哪里呢?这个就是架构,Schema:数据库数据库架构是一个独立于数据库用户的非重复命名空间,您可以将架构视为对象的容器,这不就是床了,放东西啦。相信容器的概念大家已经很熟悉了,比如一块新硬盘,我们会为他划分为N个盘符,C:,D:,E:啊之类的,在每个盘符之下,我们又有N个文件夹Folder,这些都是容器。再比如我们可以拿一个网站来做类比,一个网站包含很多的网页,图片,脚本文件,我们姑且称它为网站对象。显然,我们不可能把所有的网站对象都放到一个文件夹下面,同样道理,数据库对象也不可能象煮饺子一样就在数据库里这么一锅出。对于网站,我们通常会把不同模块的文件放在不同的子文件夹下,那么谁是存放数据库对象的文件夹呢?答案就是:架构(Schema)。

实际上数据库的每个对象都是有架构的,既每个数据库对象都有放的位置,但是我们很多人在创建数据库对象的时候却没有指定。在SQL Server 2005之后的版本中,当我们创建数据库对象没有显式指定Schema时,数据库会为我们默认地指定一个默认Schema: dbo。所有没有显式指定Schema的数据库对象,统统地被放在了dbo这个公共空间中。

架构(Schema)概念的引入就是为了解决数据库对象太多不好管理的缺点。

安装完数据库软件后,会有一些预创建的Schema,包括dbo,以及每个以预定义Role命名的Schema,比如: db_owner,db_datareader,db_datawriter

等等。

Role

角色这个概念是为了降低管理成本,简化管理的工作量而出现的,试想如果一个公司有1000人,每个人都需要对某个表进行write的权限,如果没有角色,我们要对这1000个人分别Grant权限,就是单单copy运行,也需要很久啊,如果公司有3000人呢?估计管理员早就不干了。角色(Role)就是为了解决这个问题而出现的。建立一个角色(Role),数据库管理员只用Grant这个角色拥有对这个个表的write权限就OK了,下一步要做的工作就是把公司里边需要对这个表具有write权限的员工赋予这个Role即可,管理成本是不是降低了不少(就是将一批需要的权限放在一个Role里面,并将这个Role授权给一批user)。

安装完数据库软件后,会有一些预创建的Server Role和Database Role(以db_开头)。

Server Roles:

1.       bulkadmin

2.       dbcreator

3.       diskadmin

4.       processadmin

5.       public               ---- 每个新建login的默认Server Role

6.       securityadmin

7.       serveradmin

8.       setupadmin

9.       sysadmin

Database Roles:

1.       db_accessadmin

2.       db_backupopeator

3.       db_datareader

4.       db_datawriter

5.       db_ddladmin

6.       db_denydatareader

7.       db_denydatawriter

8.       db_owner

9.       db_securityadmin

10.   public

至于具体每个角色的权限有多大,究竟每个角色能做什么事情,请查看Book Online,微软的idea是数据库所预装的Role能完成大部分的权限分配问题。

SQL - 1.区分login、user、schema和role的更多相关文章

  1. 淘宝数据库OceanBase SQL编译器部分 源代码阅读--Schema模式

    淘宝数据库OceanBase SQL编译器部分 源代码阅读--Schema模式 什么是Database,什么是Schema,什么是Table,什么是列,什么是行,什么是User?我们能够能够把Data ...

  2. SQL Server中模式(schema)、数据库(database)、表(table)、用户(user)之间的关系

    数据库的初学者往往会对关系型数据库模式(schema).数据库(database).表(table).用户(user)之间感到迷惘,总感觉他们的关系千丝万缕,但又不知道他们的联系和区别在哪里,对一些问 ...

  3. SQL Server查看login所授予的具体权限

    在SQL Server数据库中如何查看一个登录名(login)的具体权限呢,如果使用SSMS的UI界面查看登录名的具体权限的话,用户数据库非常多的话,要梳理完它所有的权限,操作又耗时又麻烦,个人十分崇 ...

  4. sql server drop login failed

    https://stackoverflow.com/questions/37275/sql-query-for-logins https://www.mssqltips.com/sqlserverti ...

  5. 【SQL】区分新来顾客和再访顾客

    -- 赋值 客户来访记录 SELECT m.* FROM (SELECT x.*, CASE WHEN x.ts > (SELECT MIN(a.ts) FROM USER.ps_afterre ...

  6. sql语句中,取得schema中的所有表信息及表的定义结构

    postgressql下'検索スキーマの中で.全てテーブルselect tablename from pg_tables where schemaname='test' mysql下'検索スキーマの中 ...

  7. SQL Server Schema

    SQL查询是引用表时,需要为其制定模式名. 在数据库的术语中,模式就是名称空间.这种方式可以把相同特性的对象组合到一个共同的名称空间中.模式也可以保护对象,所以DBA可以给模式授予显示权限. 例如,D ...

  8. How to add the ApplicationPoolIdentity to a SQL Server Login

    The ApplicationPoolIdentity is a virtual account in Windows that is dynamically generated when the a ...

  9. SQL Server与Oracle对比学习:权限管理(二) 一些有趣的比喻

    http://blog.csdn.net/weiwenhp/article/details/8094739 目录(?)[-] SQL Server权限管理 login 与user的区别 角色role ...

随机推荐

  1. EffectiveC++ 第3章 资源管理

    我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」. Chapter 3 资源管理 条款13: 以对象管理资源 有时即使你顺 ...

  2. Iterate over slices of a string

    def iter_slices(string, slice_length): """Iterate over slices of a string."" ...

  3. Arduino传感器学习目录

    Arduino-接口图  在Windows上安装Arduino-IDE  函数库和程序架构介绍   Arduino语法-变量和常量 Arduino常用的数据类型以及转换  Arduino—运算符   ...

  4. MVC5 Entity Framework学习

    MVC5 Entity Framework学习(1):创建Entity Framework数据模型 MVC5 Entity Framework学习(2):实现基本的CRUD功能 MVC5 Entity ...

  5. python 模块 wmi 远程连接 windows 获取配置信息

    测试工具应用: https://ask.csdn.net/questions/247013 wmi连接不上报错问题集 https://blog.csdn.net/xcntime/article/det ...

  6. 版本控制工具 - Git

    版本控制工具 - Git 安装完成后,打开Git Bash,这是一个命令行工具,用于操作仓库和仓库的文件.你可以通过命令将已经存在的项目变成仓库,也可以重新创建一个新项目再通过命令将其变成仓库,还可以 ...

  7. Huber Loss

    Huber Loss 是一个用于回归问题的带参损失函数, 优点是能增强平方误差损失函数(MSE, mean square error)对离群点的鲁棒性. 当预测偏差小于 δ 时,它采用平方误差, 当预 ...

  8. java应用的优化【转】

    XX银行网银系统是一套全新的对公业务渠道类系统,经过两年的建设,将逐步对外提供服务. 该系统融合了原来多个对公渠道系统,并发量是以前多个系统之和,吞吐量要求将大幅上升.为了使广大对公客户使用系统时获得 ...

  9. Python-web应用 +HTTP协议 +web框架

    web架构 # web应用 架构# C/S 架构 | B/S 架构# client server: 客户端服务器架构,C++# browser server:浏览器服务器架构,Java.Python ...

  10. asp.net core 通过ajax调用后台方法(非api)

    1.    在Startup.cs文件中添加:        services.AddMvc();            services.AddAntiforgery(o => o.Heade ...