在sqlserver 2005中,可能你们在工做或学习的时候会常常发现这样一些问题,你使用一个帐户在数据库中建立了一张表,却发现你本身建立的表却没有修改和查询的权限,这是一件很郁闷的事情,在sqlserver2000中却不存在这样的问题,那为何在2005中会出现这样的事情,这样的设置能够带来哪些好处?其实致使这一问题的缘由主要在于2005中多了一个新的概念—架构。
架构实际上在sqlserver2000中就已经存在,当咱们使用查询分析器去查询一个表的时候,一个完整的表的名称应该包括服务器名.数据库名.用户名.对象名,而在sqlserver2005中一个表的彻底限定名称应该为服务器名.数据库名.架构名.对象名
在2000中,假若有一个帐户tt在test数据库中建立了一张表table1的时候,在服务器上对查询的语句应为select * from test.tt.table1,也就是说,在sqlserver 2000中一张表所属的架构默认就是表的建立者的登陆名称,用户能够和修改他所建立的全部数据库对象。但在2005中已经将用户和其建立对象所属架构的关联取消了,而加入了一个全新的架构体系,这样作的优势主要在于下面几个方面:
1. 多个用户能够经过角色(role)或组(Windows groups)成员关系拥有同一个架构。在2005中,每一个数据库中的固定数据库角色都有一个属于本身的架构,若是咱们建立一个表,给它指定的架构名称为db_ddladmin,那么任何一个属于db_ddladmin中的用户都是能够去查询、修改和删除属于这个架构中的表,可是其它不属于这个组的用户是不行的,有一点必须注意,db_dbdatareader组的成员能够查看全部数据库中的表,db_dbdatawriter组成员能够修改全部数据库中的表,db_owner组成员能够对数据库全部表进行全部操做,这几个组的成员能够经过角色获取到在数据库中的特殊权限。
2. 删除数据库用户变得极为简单。在 SQL Server 2000 中,用户(User)和架构是隐含关联的,即每一个用户拥有与其同名的架构。所以要删除一个用户,必须先删除或修改这个用户所拥有的全部数据库对象,就好比一个员工要离职要删除他的帐户的时候,还得将他所建立的表和视图等都删除,影响过大。将架构和对象者分离后就不在存在这样的问题,删除用户的时候,对数据库对象是没有任何影响的。
3. 共享缺省架构使得开发人员能够为特定的应用程序建立特定的架构来存放对象,这比仅使用管理员架构(DBO schema)要好。
4. 在架构和架构所包含的对象上设置权限(permissions)比之前的版本拥有更高的可管理性。
5. 区分不一样业务处理须要的对象,例如,咱们能够把公共的表设置成pub的架构,把销售相关的设置为sales,这样管理和访问起来更容易.
大多数用户在建立对象的时候习惯直接输入对象名而将对象的架构名称省略,在2005中,会给用户建立的这样的表加上一个缺省的架构,用户若是没有对本身的默认架构作设置,那缺省架构就是dbo,也就是说,若是一个db_ddladmin的成员在数据库中建立一个没有加上架构名称的表,这个表在数据库中的完整名称应该是dbo.表名,建立者在数据库中若是不是属于其它特殊组的成员,是不能对本身建立的表进行任何修改和查询的,那就至关于把本身赚的钱存进了别人的银行卡,本身却取不出来。