DBO是每个数据库的默认用户,具有所有者权限,即DbOwner
通过用DBO作为所有者来定义对象,能够使数据库中的任何用户引用而不必提供所有者名称。
比如:你以User1登录进去并建表Table,而未指定DBO,
当用户User2登进去想访问Table时就得知道这个Table是你User1建立的,要写上User1.Table,如果他不知道是你建的,则访问会有问题。
如果你建表时把所有者指给了Dbo,则别的用户进来时写上Dbo.Table就行了,不必知道User1。
不光表是如此,视图等等数据库对象建立时也要如此才算是好。
建表、存储过程、视图等数据库对象时,其对应的所有者是创建它的用户。则除了该用户其他登录用户要引用这些东东时,都要加上前缀,很是麻烦。而且,程序因此易出错,你查来查去问题确出在这,浪费你时间。
你好,我的理解是:
表名Userinfo前的dbo不是用户名,而是模式名,只不过这个模式名恰好也叫做dbo。
在sql server数据库中,凡是能够正常登陆系统时使用的登陆账户都会绑定一个数据库用户;或者说在sqlserver中每个数据库用户都对应一个sqlserver管理软件的登陆账户。
假设以windows身份验证登陆进去之后,新创建一个数据库,在创建完数据库之后会将dbo这个默认用户同时创建完毕,并且这个dbo用户拥有一个默认的模式,模式名就叫做dbo。
在创建表的时候如果不特别指定模式,就默认在dbo下建表。
如果在建表的时候显示指定在某个模式下,那么这个表前面就会出现特定模式名.表名。
在安装sqlserver数据库的时候,选择了windows身份验证时,那么在安装时添加的用户就可以拥有了超级管理员的权限,一般用这个超级管理员登录sqlservermanagement studio之后,可以新建数据库(可以使用sql语句,可以使用鼠标点选的方式),新建数据库时系统会默默的新建一个名字叫做dbo的用户,这个用户有默认的拥有一个dbo的模式。这时这个超级管理员就完成了和默认用户dbo的绑定映射,并且当前建表都在用户dbo的默认模式dbo下。
下次再用windows的当前账户登录的时候,就会使用新建时完成的映射操作。
如果在新建数据库用户,还要考虑到存取控制等权限操作。详细情况咱们可以讨论。
总之是几个概念的区别:
数据库,数据库用户,管理系统的登陆账户(有可能是系统的管理员账户),模式,基本表,视图,索引,角色,权限等的区别。
同一个数据库下不同用户间的模式名不可以重复,这是我实验得到的结果,不知道是不是准确。模式实际上就是一个表的命名空间。
欢迎交流。
dbo是sqlserver中最垃圾的东西了,也是微软一直是单用户产品的表现