首先,我们来看一下微软对架构的官方定义:
架构(Schema)是形成单个命名空间的数据库实体的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。在这里,我们可以将架构看成一个存放数据库中对象的一个容器。
显然这与Oracle中的用户(Schema)含义有着很大的不同。
架构实际上在SQL Server 2000中就已经存在,在SQL Server 2000中数据库用户和架构是隐式连接在一起的, 每个数据库用户都是与该用户同名的架构的所有者。当我们使用查询分析器去查询一个表的时候,一个完整的表的名称应该包括 服务器名.数据库名.用户名.对象名 ,而在SQL SERVER 2005/2008中一个表的完全限定名称应该为 服务器名.数据库名.架构名.对象名 。即,SQL SERVER 2000中的完全限定名称中的“用户名”也是数据库中的用户,也是“架构名”。但在2008中已经将用户和其创建对象所属关联取消了,而加入了一个全新的架构体系。
用户架构分离的好处
db_ddladmin
,那么任何一个属于
db_ddladmin
中的用户都是可以去查询、修改和删除属于这个架构中的表,但是不属于这个组的用户是没有对这个架构中的表进行操作的权限。
dbo
。大多数用户在创建对象的时候习惯直接输入对象名而将对象的架构名称省略,在2005/2008 中,用户如果没有设置自己的默认架构,会给这样创建的对象加上一个缺省的架构
dbo
,也就是说,如果一个db_ddladmin的成员在数据库中创建一个没有加上架构名称的表,这个表在数据库中的完整名称应该是
dbo.表名
,创建者在数据库中如果不是属于其它特殊组的成员,是不能对自己创建的表进行任何修改和查询的,那就相当于把自己赚的钱存进了别人的银行卡,自己却取不出来。
dbo
的对象。