34,597
社区成员
发帖
与我相关
我的任务
分享
SQL Server 2005 联机丛书
用户架构分离 发送反馈
请参阅
全部折叠全部展开 语言筛选器: 全部语言筛选器: 多语言语言筛选器: Visual Basic语言筛选器: C#语言筛选器: C++语言筛选器: J#语言筛选器: JScript
数据库和数据库应用程序的安全注意事项 >
Visual Basic(Declaration)
C#
C++
J#
JScript
SQL Server 2005 切断数据库用户和架构之间的隐式连接。
什么是架构?
架构是形成单个命名空间的数据库实体的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。
例如,为了避免名称冲突,同一架构中不能有两个同名的表。两个表只有在位于不同的架构中时才可以同名。
注意:
在讨论数据库工具时,“架构”还指目录信息,用于说明架构或数据库中的对象。在讨论 Analysis Services 时,“架构”指多维对象,如多维数据集和维度。
从 SQL Server 2000 到 SQL Server 2005
虽然 SQL Server 2000 包含 CREATE SCHEMA 语句,但实际上并不会像上面所定义的那样创建架构。在 SQL Server 2000 中,数据库用户和架构是隐式连接在一起的。每个数据库用户都是与该用户同名的架构的所有者。对象的所有者在功能上与包含它的架构所有者相同。因而,SQL Server 2000 中的完全限定名称的“架构”也是数据库中的用户。因此,从 SQL Server 2000 数据库中删除用户之前,管理员需要删除该用户所拥有的所有对象或更改这些对象的所有者。以包含此对象的 SQL Server 2000 数据库为例:
accounting.ap.george.reconciliation
此对象的所有者为用户“george”。如果管理员需要删除用户“george”,则必须先删除此对象或更改此对象的所有者。在后一种情况下,可以按如下方式将其重命名:
accounting.ap.sandra.reconciliation
转让对象的所有权也会更改其完全限定名称。引用 accounting.ap.george.reconciliation 的任何代码必须经过更新以反映对名称所做的更改。
在 SQL Server 2005 中,架构独立于创建它们的数据库用户而存在。可以在不更改架构名称的情况下转让架构的所有权。并且可以在架构中创建具有用户友好名称的对象,明确指示对象的功能。例如,除了 accounting.ap.sandra.reconciliation 外,您还可以创建名为 accounting.ap.invoice.reconciliation 的架构。因为“invoice”不是用户,所以从数据库中删除用户后,无需更改此名称。这就简化了数据库管理员和开发人员的工作。
用户架构分离的好处
将架构与数据库用户分离对管理员和开发人员而言有下列好处:
多个用户可以通过角色成员身份或 Windows 组成员身份拥有一个架构。这扩展了允许角色和组拥有对象的用户熟悉的功能。
极大地简化了删除数据库用户的操作。
删除数据库用户不需要重命名该用户架构所包含的对象。因而,在删除创建架构所含对象的用户后,不再需要修改和测试显式引用这些对象的应用程序。
多个用户可以共享一个默认架构以进行统一名称解析。
开发人员通过共享默认架构可以将共享对象存储在为特定应用程序专门创建的架构中,而不是 DBO 架构中。
可以用比早期版本中的粒度更大的粒度管理架构和架构包含的对象的权限。
完全限定的对象名称现在包含四部分:server.database.schema.object。
默认架构
SQL Server 2005 还引入了“默认架构”的概念,用于解析未使用其完全限定名称引用的对象的名称。在 SQL Server 2000 中,首先检查的是调用数据库用户所拥有的架构,然后是 DBO 拥有的架构。在 SQL Server 2005 中,每个用户都有一个默认架构,用于指定服务器在解析对象的名称时将要搜索的第一个架构。可以使用 CREATE USER 和 ALTER USER 的 DEFAULT_SCHEMA 选项设置和更改默认架构。如果未定义 DEFAULT_SCHEMA,则数据库用户将把 DBO 作为其默认架构。
授权
许多实体的所有权都可以转让。
请参阅
概念
权限层次结构
主体
其他资源
CREATE SCHEMA (Transact-SQL)
ALTER AUTHORIZATION (Transact-SQL)
CREATE USER (Transact-SQL)
ALTER USER (Transact-SQL)
CREATE SCHEMA (Transact-SQL)
ALTER SCHEMA (Transact-SQL)
sys.schemas (Transact-SQL)