您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

Sql Server用户名和登录名的关系总结

添加时间:2014-3-4 16:49:03  添加: 思海网络 

  Sql Server中的用户名和登录名的关系:

  登录名:服务器方的一个实体,使用一个登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个登录名的定义存放在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

  实验:

  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、数据库、服务器

分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站