架构,MS SQL中对象的所有者

时间:2008-10-31 18:29:01

标签: sql sql-server sql-server-2005 sql-server-2000

默认情况下,使用dbo所有者/架构设置对象(表,存储过程等)(我认为ms sql 2000将其称为所有者,而ms sql 2005将其称为架构)

所有者/架构实际上是数据库中的角色或用户。我总是保留默认的dbo,但我最近在微软培训书中看到了一些例子,其中一些表和存储过程具有不同的所有者/模式。这样做有什么好处?为什么?

5 个答案:

答案 0 :(得分:24)

当您遇到安全问题时,使用模式非常有用。

如果您有多个访问数据库的应用程序,您可能不希望后勤部门访问人力资源记录。因此,您将所有人力资源表放入hr模式,并且只允许hr角色中的用户访问它。

未来六个月,物流现在需要知道内部费用账户,这样他们就可以将所有这些蓝色笔的调色板发送到正确的位置。然后,您可以创建一个存储过程,该存储过程以具有查看hr模式和物流模式权限的用户身份执行。物流用户永远不需要知道HR中发生了什么,但他们仍然可以获得他们的数据。

您也可以像cfeduke建议的那样使用模式,并使用它们在对象浏览器中对事物进行分组。如果你这样做,请小心,因为当你真的只需要一个dbo.Address时,你最终可能会创建Person.Address和Company.Address(我不是在敲你的例子,cfeduke,只是用它来说明两者地址表可能是相同的,也可能是不同的YMMV)。

答案 1 :(得分:5)

在SQL 2000中,Schema与数据库用户等效,在SQL 2005中,每个模式都是一个独立的命名空间,独立于创建它的数据库用户。

当我需要制作稍后可能在其他项目中使用的功能或模块时,我使用模式,因此我将能够隔离模块使用的数据库对象。

答案 2 :(得分:5)

我在过去的类似命名空间中使用了模式,因此您可以拥有多个名为Address([Person].[Address][Company].[Address])的实体。这样做的好处是SQL Management Studio中的可视化组织,您可以通过将所有内容放在一个模式下并使用单个标识符(即[dbo].[PersonAddress])命名表来获得相同的功能。

在我们所有开发机器上运行SQL Server Developer Edition之前,我还将它们用于开发人员与开发人员开发(当我在职业生涯早期拥有集中式开发数据库时)。

答案 3 :(得分:3)

组织

在开发环境中,对象的生产副本是dbo,但开发人员可以使用自己的模式进行开发。然后代码可以非常简单地引用prod副本或它们的更改。使用别名可以使这种技术更加简单。


此外,生产数据库可能支持许多系统或子系统。您可以使用不同的模式来保持这些对象的分组。

答案 4 :(得分:1)

This article解释得很清楚,包括从SQL Server 2000到2005的更改。