Sql Server中的用户名和登录名(或服务器账号)搞迷糊(如下图所示):

虽然用sa(登录名)就搞定一切东西了,当然这会存在一些安全隐患。

登录名

服务器方的一个实体,使用一个登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个登录名的定义存放在 master 数据库的 syslogins 表中

用户名

一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。用户定义信息存放在每个数据库的 sysusers 表中。

SQLSERVER把登录名与用户名的关系称为映射。
用登录名登录SQLSERVER后,在访问各个数据库时,SQLSERVER会自动查询此数据库中是否存在与此登录名关联的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库(guest是一个特殊的用户名,后面会讲到)。

一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户,一个用户也可以被多个登录使用。好比SQLSERVER就象一栋大楼,里面的每个房间都是一个数据库.登录名只是进入大楼的钥匙,而用户名则是进入房间的钥匙.一个登录名可以有多个房间的钥匙,但一个登录名在一个房间只能拥有此房间的一把钥匙。

链接或登录Sql Server服务器时是用的登录名而非用户名登录的,程序里面的链接字符串中的用户名也是指登录名。

SQLSERVER中有几个特殊的登录名和用户名:

我们常见的dbo(用户名)是指  以sa(登录名)或windows   administration(Windows集成验证登录方式)登录的用户,也就是说数据库管理员在SQLSERVER中的用户名就叫dbo,而不叫 sa,这一点看起来有点蹊跷,因为通常用户名与登录名相同(不是强制相同,但为了一目了然通常都在创建用户名时使用与登录名相同的名字),

例如创建了一个登录名称为me,那么可以为该登录名me在指定的数据库中添加一个同名用户,使登录名me能够访问该数据库中的数据.当在数据库中添加了一个用户me 后,之后以me登录名登录时在该数据库中创建的一切对象(表,函数,存储过程等)的所有者都为me,如me.table1,me.fn_test(),而不是dbo.table1,dbo.fn_test().

SQL Server中还有一个特殊的数据库角色public,它存在于每一个数据库中,包括系统数据库,如master、msdb、model和用户数据库,数据库的所有用户都属于public角色,并且不能从public角色中删除。

在SQLSERVER数据库中,guest帐户是特殊的用户帐户。如果用户使用USE database语句访问的数据库中没有与此用户关联的帐户,此用户就与guest用户相关联。

另外SQLSERVER采取登录名-用户名的安全规则,和Oracle里面的schema有点像。SQLSERVER使用所有者进行限定(类似于Oracle中的schema),是因为不同的用户可能创建同名的对象,  例如登录名me和登录名you在pubs数据库中分别创建了用户名me和you,这二个用户都创建了testtable这个同名表,而这二个表虽然同名但结构或数据可能完全不同,为了避免调用错误,必须使用所有者名称进行限定.

如何来调用别的用户创建的对象呢?  例如me用户访问you用户创建的表或访问dbo创建的表. 此种情况,必须同时满足二个条件:

1. 将me用户的数据库角色设置为db_owner,否则无法访问其他用户(包括dbo用户)创建的对象.(企业管理器-> 用户,右键菜单 <属性> 中设置)  :

2. 使用所有者进行限定. 
例如用户me访问用户you创建的testtable: 
select   *   from   you.testtable 
另外, dbo用户作为管理员,系统赋予其所有的权限,可以调用任何用户创建的对象. 
若某个数据库存在2个或2个以上的用户名,如果具有db_owner角色的用户在访问对象时省略了所有者,则系统先查找该用户的对象,若找不到则查找dbo用户是否有同名对象.例如: 
select   *   from   testtable     或 
select   *   from   pubs..testtable

Sql Server中的用户名和登录名相关推荐

  1. 替换SQL Server中Windows身份验证登陆名buildin\Administrator

    以Administrator账户登陆服务器的人员,均可以以buildin\Administrator登陆数据库,并且拥有sysadmin最大权限.而能够使用Administrator登陆服务器可能包括 ...

  2. 使用DBATools PowerShell修复SQL Server中的孤立用户

    This article gives an overview of Orphan users and fixing them using DBATools PowerShell. 本文概述了Orpha ...

  3. SQL Server中的登录触发器概述

    This article gives you an overview of Logon triggers in SQL Server and its usage to control SQL Serv ...

  4. 如何修改 SQL Server 中的实例名 ?

    在微软的社区也看到了这个问题: https://social.msdn.microsoft.com/Forums/en-US/c59b0840-1595-456a-b77e-d95b1a2a9097/ ...

  5. SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数

    很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之前开发的系统要么因为历史原因用的是SQL2000要么根本用不着在SQL Server中启用CLR ...

  6. SQL Server中的KILL SPID命令

    This article gives an overview of the KILL SPID command and how to monitor the rollback progress. 本文 ...

  7. 在AWS RDS SQL Server中进行审核

    This article explores the server and database audit in AWS RDS SQL Server. 本文探讨了AWS RDS SQL Server中的 ...

  8. SQL Server 中的身份认证讲解

    SQL Server 中的身份认证讲解TIME:2009-4-22   |   READ:228 Microsoft® SQL Server™ 可以在两种安全(身份验证)模式之一下工作: Window ...

  9. SQL Server 2014 windows身份验证登录失败解决办法

    网上大部分安装SQL Server教程里都默认选择的windows身份验证登录,没有设置sql server账号,因此初次登录时只能通过这一种方式登录,若windows身份验证也不通过,该如何解决呢. ...

最新文章

  1. Unix / Linux世界里的4-2-1
  2. Win10:你需要来自XXX的权限才能对此文件夹进行更改
  3. 每个网页设计师应该知道的10条CSS规则
  4. mysql空间扩展 VS PostGIS
  5. mysql8 允许外网访问
  6. 5.1.2 操作系统控制I/O设备的I/O控制器
  7. Vivado过程文件解释
  8. 联想服务器st系列,联想ThinkSystem ST50评测 一款超值的入门级服务器
  9. AD9中元件无法显示的问题解决
  10. 半导体物理学——(一)半导体中的电子状态
  11. 约瑟夫环问题java_Java求解约瑟夫环问题
  12. 手机号码11位以及格式验证规则
  13. 【小米集团】2019校招在线考试-算法试卷编程题
  14. 单目相机三维姿态解算
  15. Laravel OAuth2 (三) ---使用 services 和 facades
  16. CNN经典网络:LeNet、AlexNet、NIN、VGG
  17. 算法 - n个数字形成的圆圈中循环删除第m个数字(C++)
  18. P6专题:P6 EPPM和PPM基本概念
  19. 第十三周项目4—立体类族共有的抽象类
  20. SPSS常用的10种统计分析

热门文章

  1. new Date()时间格式转时间戳在苹果机iOS上无效
  2. 宠物类食品猫粮、狗粮、动物粮食上架亚马逊提交FDA认证注册解析
  3. 吃鸡神器!免费送一台新款苹果 iPad
  4. 融入城市路网的乡村道路问题及对策
  5. 爬取东方财富股吧评论
  6. 数据分析师,今年无情被辞:想给数据人提个醒!!
  7. 2015——那年、匆匆
  8. 网易163邮箱相关服务
  9. KVM基于Web部署虚拟主机
  10. 新入职如何快速的熟悉项目