SQL Server 2000中"db_owner"和"拥有数据库的用户"有什么区别?

Mik*_*oss 17 sql sql-server permissions sql-server-2000

我试图更好地理解为什么我们的某个数据库更新脚本无法在特定客户站点上正常工作,并将其缩小(我认为)到数据库所有权和角色.

免责声明:我实际上正在等待客户DBA的回复,以便他们可以告诉我们他们最近是否升级了他们的SQL数据库,因此我们可以查看他们的数据库.我认为如果我们的应用程序的数据库登录转换为模式,SQL 2000到SQL 2005的转换可能会混淆我们的脚本,因为我们dbo在更新脚本中的几个地方引用.

无论如何,我一直试图找到更好的数据库所有权和角色的解释,以及当你没有在T-SQL语句中明确指定所有者时,它如何影响实际分配数据库对象的所有者.例如,我们的更新脚本通常只是CREATE TABLE foo代替CREATE TABLE dbo.foo或其他东西,但我发现了一些明确使用的dbo,这些是导致问题的那些(仅针对这一个客户).

我发现这篇文章(特定于SQL Server 2000),但该页面上的表格令人困惑.它提到db_owner并"拥有数据库"作为用户可以拥有的角色的两种不同的可能性.

例如,该表规定,如果一个用户sam,谁是谁的db_owner作用,运行查询CREATE TABLE [test3](abc int),将所拥有sam.

然后它提到如果另一个sue" 拥有数据库 "(sic)的用户运行相同的查询,它将归其所有dbo.

不会db_owner和"拥有数据库"是一回事吗?该表暗示"在db_owner角色中"和实际上"成为数据库的所有者" 之间存在差异.但是,如果那是真的,那么"拥有数据库"是什么意思,如果它不是作为db_owner角色的成员呢?

Tho*_*mas 30

不,db_owner和数据库的所有者不一样.dbo是用户,db_owner是数据库角色.数据库由登录拥有.无论登录拥有什么数据库,都会在数据库中显示别名dbo.您可以使用sp_changedbowner系统存储过程更改数据库所有者.

数据库中的所有对象都归用户所有.作为db_owner角色成员的用户以及其他权限可以创建dbo拥有的对象.如果用户不是db_owner的成员,但具有一些创建权限(例如Create Table),则他们创建的任何对象将由创建它们的用户拥有.您可以使用sp_changeobjectowner系统存储过程更改对象的所有权.