sql server 登录名和用户名的区别和联系 

总括:登录名可以理解为进入整个大楼的钥匙,用户名可以理解为一个房间的钥匙,这里所说的大楼就是sql server服务器,而房间就是这个sql server服务器中的具体的库,要注意登录名是存在于master数据库的syslogins表中,用户名是在各个具体的库下建立的(也就是要先进入各个库),
最关键的是:一个登录名可以和多个不同库下的用户做映射,但是在同一个库下只能和一个用户做映射,并且一个用户名可以和多个登录名有映射关系,  真正有权限的是用户名,只不过是用登录名去登进数据库,然后去找映射的用户名,这样就有了相应的权限,刚开始建立的登录名只要把该登录名的服务器角色设置为Database Creator,就可以创建新的数据库了,并且新建立的这个数据库中会自动生成两个用户名:dbo和guest。并且刚刚建立的登录名就和dbo映射了,还有就是rbo也和sa映射了,因为sa作为管理员的登录名和每个库中的rbo用户映射。

1.//根据数据库概述(王珊版,定义模式)

create schema test authorization guest
create table  tab1(col1 smallint,
col2 int,
col3 char(20),
col4 numeric(10,3),
col5 decimal(5,2)
);

2.对概念进行详细阐述

登录名:服务器方的一个实体,使用一个登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个登录名的定义存放在master数据库的syslogins表中
用户名:一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。用户定义信息存放在每个数据库的sysusers表中。
SQLSERVER把登录名与用户名的关系称为映射。用登录名登录SQLSERVER后,在访问各个数据库时,SQLSERVER会自动查询此数据库中是否存在与此登录名关联的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库(guest是一个特殊的用户名,后面会讲到)。
一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户,一个用户也可以被多个登录使用。好比SQLSERVER就象一栋大楼,里面的每个房间都是一个数据库.登录名只是进入大楼的钥匙,而用户名则是进入房间的钥匙.一个登录名可以有多个房间的钥匙,但一个登录名在一个房间只能拥有此房间的一把钥匙。
链接或登录Sql Server服务器时是用的登录名而非用户名登录的,程序里面的链接字符串中的用户名也是指登录名。

3.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这个同名表,而这二个表虽然同名但结构或数据可能完全不同,为了避免调用错误,必须使用所有者名称进行限定.

4.如何来调用别的用户创建的对象呢?例如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
实验:注意
l   创建登录名login_ibrahim
l   用此登录名登录“查询分析器”,发现只能查看系统自带的数据库,如master、Northwind、pubs等
l   将登录名login_ibrahim的服务器角色设置为Database Creator(若不设置此项,则无法创建数据库)
l   在“查询分析器”中输入create database test,然后执行,这会创建一个名为test的数据库
l  查看test数据库拥有的用户名,发现系统会自动创建了dbo和guest这两个用户名。其中dbo用户名对应的登录名为login_ibrahim,不能更改test数据库登录名login_ibrahim所对应的用户名dbo,此时test数据库的dbo用户名,其对应的登录名有两个,一个是login_ibrahim,另一个是sa(没想到吧^_^,因为sysadmin 固定服务器角色的成员会自动映射到 dbo。)
l  创建登录名login_ibrahim2,不设置任何服务器角色,将可访问数据库设置为test
l  打开test数据库的用户名列表,会发现系统会为登录名login_ibrahim2自动创建一个同名的用户名login_ibrahim2,然后再创建一个名为T_ibrahim的数据表
l  此时用login_ibrahim2登录SQLSERVER,发现不能在test数据库中创建表
l  用login_ibrahim登录SQLSERVER,为login_ibrahim2用户名授予对test数据库的db_ddladmin权限
l  此时用login_ibrahim2登录SQLSERVER,发现可以创建数据表(创建名为T_ibrahim的数据表),并插入数据。

sql server 登录名和用户名的区别和联系相关推荐

  1. sql server 登录名和用户名的区别

    登录名sql_1,已经有了bookset的用户user_01,现在 在bookset数据库新建user_0101 报错: 登录名sql_1,已经有了bookset的用户user_01,现在 在stud ...

  2. SQL server 登录名与用户名

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

  3. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系

    原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...

  4. SQL Server登录名,用户和安全标识符(SID)

    抽象 (Abstract) Logins and Users are basic security concepts in SQL Server. They are often, and incorr ...

  5. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系**

    1.一个数据库用户可以对应多个架构(架构是表容器).架构里面包含的是数据库表. 2.一个数据库角色有可能涉及多个架构.数据库角色对应的是权限. 3.一个用户对应一个数据库角色. 4.登录名与数据库用户 ...

  6. sql登录名和用户名_通过分配角色和权限来移动或复制SQL登录名

    sql登录名和用户名 This article speaks to, how to copy SQL Logins on the new server with Server Level roles ...

  7. SQL Server还原数据库后如何同步登录名和用户名

    SQL Server数据库在完成备份还原后,经常会发现登录用户失败,这是就需要做登录名和用户名的同步操作. SP_CHANGE_USERS_LOGIN存储过程可以通过重新映射登录名和数据库名来解决这个 ...

  8. SQL Server将数据库的用户名映射到登录名

    将数据库服务器上的数据库文件拷贝到另外一台机器上,附加后,新建登录名时无法将原数据库用户映射到此登录名.这样用新建的登录名访问数据库时,必须要以"架构名.对象名"的形式才可以. 通 ...

  9. SQL Server 登录出错 用户 ‘sa‘ 登录失败 (Microsoft SQL Server, Error: 18456)

    文章目录 Intro 两种认证方式(authentication) Windows Authentication 登录/测试 四个修改点 启用`SQL Server authentication` 启 ...

最新文章

  1. noip搜索模拟题 骰子
  2. linux更新模块,Linux下Nginx的安装、升级及动态添加模块
  3. 统计学习方法第二章作业:感知机模型原始形式与对偶形式代码实现
  4. 2.1 网站防******与企业虚拟化需求分析
  5. .net 浏览器请求过程(图)
  6. oracle分页包,Oracle分页获取数据的实现 (包和存储过程)
  7. LeetCode 88 合并两个有序数组
  8. 国外RSGIS权威期刊杂志
  9. [导入]关于Gmail无法链接的解决方法。
  10. Office 开发版本号与版本对应关系
  11. 为什么我们要减肥?科学家证实肥胖或可导致癌细胞肿瘤生长
  12. 死亡细胞1.9最新辅助
  13. Collection和List,Set,Map的关系与说明
  14. tonybot 人形机器人 首次开机 0630
  15. pycharm如何修改字体大小和背景成护眼色
  16. OpenCV实践之路——使用imread()函数读取图片的六种正确姿势
  17. 2021年了,回头看看20世纪的黑客入侵事件
  18. 学深度学习已经可以有这么多选择,是时候出份书单了
  19. win10怎样进网站服务器,win10怎样进入云服务器
  20. 微信小程序开发工具导入开发项目教程-阿白必备

热门文章

  1. css改变权重,让css的权重变得更友好的小技巧
  2. 向论文作者索要源代码邮件模板
  3. Unity Animator不受Time.TimeScale影响
  4. c语言算361的阶乘,361的阶乘等于多少
  5. 万里汇WorldFirst即将推出提现至支付宝服务!
  6. 微盟2018校园招聘面试题学习
  7. 【视频分类论文阅读】Two-Stream Convolutional Networks for Action Recognition in Videos
  8. android 混编JsBridge的原理和实现
  9. 全网最硬核 Java 新内存模型解析与实验 - 3. 硬核理解内存屏障(CPU+编译器)
  10. 基于灰狼算法优化概率神经网络PNN的分类预测-附代码