dbo与db_owner区别

dbo 是具有在数据库中执行所有活动的暗示性权限的用户 。将固定服务器角色的任何成员都映射到每个数据库内称为 dbo 的一个特殊用户上 。另外,由固定服务器角色的任何成员创建的任何对象都自动属于 dbo 。
例如,如果用户是固定服务器角色的成员,并创建表 T1,则表 T1 属于 dbo,并以 dbo.T1 而不是 .T1 进行限定 。相反,如果不是固定服务器角色的成员,而只是固定数据库角色的成员,并创建表 T1,则 T1 属于,并限定为 .T1 。该表属于,因为该成员没有将表限定为 dbo.T1 。
无法删除 dbo 用户,且此用户始终出现在每个数据库中 。
只有由固定服务器角色成员(或 dbo 用户)创建的对象才属于 dbo 。由任何其他也不是固定服务器角色成员的用户(包括固定数据库角色成员)创建的对象:属于创建该对象的用户,而不是 dbo用创建该对象的用户名限定
拥有数据库角色的用户将可以看到并操作该数据库下所有架构的对象
如果一个用户拥有数据库的权限,那么该用户将可以操作该数据库下所有架构的对象(也就是该数据库中所有的表、视图、存储过程等对象,拥有权限的用户都可以看到并进行操作),如果一个用户没有权限,那么该用户将只能看到该用户所拥有架构的数据库对象 。
为了说明这一点我来举个例子,现在数据库里面有一个叫max的用户,他不拥有数据库的任何架构:

dbo与db_owner区别

文章插图
但是他拥有数据库的角色权限:
dbo与db_owner区别

文章插图

dbo与db_owner区别

文章插图
用max登陆数据库后,他可以看到并操作所有架构的表等对象(可以看到下图中max可以看到架构和dbo架构的所有表,但是他本身并不拥有这两个架构):
dbo与db_owner区别

文章插图
【dbo与db_owner区别】接下来我们用数据库管理员账户来取消用户max在数据库中的权限:
dbo与db_owner区别

文章插图
然后再用max登陆数据库,现在发现他什么都看不到了,原因就是现在他失去了数据库的权限:
dbo与db_owner区别

文章插图