[转]sql server登录名与数据库用户名dbo的差别

SQLSERVER要求在调用函数时,只有返回表值的函数可以不加所有者,否则必须加所有者名称,具体请参阅CREATE   FUNCTION帮助.所以这又是一个我们要遵守的规则.
至于所有者是不是都是dbo,要看创建这个函数的用户是谁,在这一点上函数与表或存储过程没有任何区别,也就是说所有者就是创建她的用户.
我们常见的dbo是指以sa(SQLSERVER登录方式)或windows   administration(Windows集成验证登录方式)登录的用户,也就是说数据库管理员在SQLSERVER中的用户名就叫dbo,而不叫 sa,这一点看起来有点蹊跷,因为通常用户名与登录名相同(不是强制相同,但为了一目了然通常都在创建用户名时使用与登录名相同的名字),例如创建了一个 登录,名称为me,那么可以为该登录名me在指定的数据库中添加一个同名用户,使登录名me能够访问该数据库中的数据.当在数据库中添加了一个用户me 后,之后以me登录名登录时在该数据库中创建的一切对象(表,函数,存储过程等)的所有者都为me,如 db.me.table1,db.me.fn_test(),而不是dbo.
不管怎样,只要记住了sa这个登录名对应的用户名是dbo而不是sa就行了.
另外,不要混淆登录名与用户名.登录名只是具有连接到SQLSERVER的权限,而没有访问SQLSERVER上数据库的权限,所以要为该登录名在指定的 数据库中创建用户名,使其可以访问那个数据库中的数据.一个登录名可以在多个数据库中创建用户名,以使这个登录名能够访问多个数据库(在登录连接的字符串 中指定默认的数据库名称),但是一个登录名在一个数据库中只能创建一个对应的用户名,也就是说me登录名在pubs数据库(举例)只能创建一个用户名.
比喻一下:SQLSERVER就象一栋大楼,里面的每个房间都是一个数据库.登录名只是进入大楼的钥匙,而用户名则是进入房间的钥匙.一个登录名可以有多 个房间的钥匙.SQLSERVER把登录名与用户名的关系称为映射.
至于为什么要使用所有者进行限定,是因为不同的用户可能创建同名的对象,例如登录名me和登录名you在pubs数据库中分别创建了用户名me,和 you,这二个用户都创建了testtable这个同名表,而这二个表虽然同名但结构或数据可能完全不同,为了避免调用错误,必须使用所有者名称进行限 定.
还有,怎样来调用别的用户创建的对象呢?例如me用户访问you用户创建的表或访问dbo创建的表.此种情况,必须同时满足二个条件:
1.将me用户的数据库角色设置为db_owner,否则无法访问其他用户(包括dbo用户)创建的对象.(企业管理器-> 用户,右键菜单 <属性> 中设置)
2.使用所有者进行限定.
例如me访问you创建的testtable:
select   *   from   you.testtable
另外,dbo用户作为管理员,系统赋予其所有的权限,可以调用任何用户创建的对象.
如果具有db_owner角色的用户在访问对象时省略了所有者,则系统先查找该用户的对象,若找不到则查找dbo用户是否有同名对象.例如:
select   *   from   testtable     或
select   *   from   pubs..testtable

原文地址:  http://topic.csdn.net/t/20060720/13/4893076.html

转载于:https://www.cnblogs.com/lynnjeans/archive/2011/09/23/2186088.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值