【发布时间】:2011-02-13 11:28:42
【问题描述】:
我试图更好地理解为什么我们的一个数据库更新脚本无法在特定客户站点正常工作,并将其范围缩小(我认为)为数据库所有权和角色。
免责声明:我实际上正在等待客户 DBA 的回复,以便他们告诉我们他们最近是否升级了 SQL 数据库,以便我们查看他们的数据库。我认为如果我们的应用程序的数据库登录被转换为模式,SQL 2000 到 SQL 2005 的转换可能会破坏我们的脚本,因为我们在更新脚本的几个地方引用了
dbo。
无论如何,我一直在尝试更好地解释数据库所有权和角色,以及当您没有在 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 角色的成员,这意味着什么?
【问题讨论】:
标签: sql sql-server permissions sql-server-2000