sql - SQL Server 2000 中的 "db_owner"和 "the user that owns the database"有什么区别?

标签 sql sql-server permissions sql-server-2000

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

Disclaimer: I'm actually waiting to hear back from the customer's DBA so they can tell us if they upgraded their SQL database recently and so we can look at their database. I'm thinking a SQL 2000 to SQL 2005 conversion might have hosed our scripts if our applications's database login was converted to a schema, because we were referencing dbo in a few places in the update script.

无论如何,我一直在尝试找到对数据库所有权和角色的更好解释,以及当您未在 T-SQL 语句中显式指定所有者时,它如何影响数据库对象实际分配的所有者。例如,我们的更新脚本通常只执行 CREATE TABLE foo 而不是 CREATE TABLE dbo.foo 或其他内容,但我发现一些显式使用 dbo ,这些是目前造成问题的原因(仅针对该客户)。

我找到了this article (特定于 SQL Server 2000),但该页面上的表格令人困惑。它提到 db_owner 和“拥有数据库”作为用户可以拥有的角色的两种不同可能性。

例如,该表指出,如果具有 db_owner 角色的用户 sam 运行查询 CREATE TABLE [test3](abc int ),它将由 sam 所有。

然后提到,如果“拥有数据库”(原文如此)的另一个用户 sue 运行相同的查询,则该查询将归 所有dbo

db_owner 和“拥有数据库”不是同一件事吗?该表暗示“处于 db_owner 角色”与实际“作为数据库的所有者”之间存在差异。但是,如果这是真的,那么如果它不是 db_owner 角色的成员,那么“拥有数据库”意味着什么?

最佳答案

不,db_owner 和数据库的所有者不同。 dbo 是用户,db_owner 是数据库角色。数据库由登录名拥有。无论拥有该数据库的登录名在数据库内都被别名为 dbo。您可以使用 sp_changedbowner 系统存储过程更改数据库所有者。

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

关于sql - SQL Server 2000 中的 "db_owner"和 "the user that owns the database"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2731787/

相关文章:

c# - 外键约束错误但不应该发生

mysql - 如何在 mySQL DB 的某些列中找到中断的序列?

sql - 如果一个表中为空,则从其他中选择

javascript - 当我允许摄像头或麦克风(javascript)时,chrome 会触发什么事件

java - Android API 23 java.net.UnknownHostException : Unable to resolve host "URL": No address associated with hostname

mysql - 我的表有唯一的id,删除重复记录

sql - 摆脱 "Using temporary; Using filesort"

sql-server - 数据库架构澄清

sql-server - 使用 select into where notists 查询时出现 SQL 错误

linux - Ubuntu 和 Mavericks 之间 cifs 挂载的权限问题