SQL SERVER 架构管理

架构特点:

架构是数据库级的安全对象,是数据库中表、视图、存储过程等对象的容器,是形成单个命名空间的数据库实体的集合,一个架构只能有一个拥有者。

将所有权与架构分离的意义:

①架构所有权和架构范围内的安全对象可以转移,对象可以在架构之间转移

②一个用户可以拥有多个架构,多个数据库用户可以使用同一个默认架构

③使用架构,使得对架构和架构中对象的权限管理更加精细,用户在对架构对象进行操作时,不仅需要获得对对象操作的权限,还要获得对架构的操作权限

④架构可以由任何数据库主体拥有,如角色和应用程序角色等。可以删除数据库用户而不删除相应架构中的对象,删除用户并不会造成对架构和架构中对象的影响

架构管理

一、CREATE SCHEMA--------------------------------创建架构

CREATE SCHEMA <架构名子句> [<架构元素>[,.........n]]

<架构名子句>::={架构名|AUTHORIZATION  所有者名 |架构名 AUTHORIZATION 所有者名}

<架构元素>::={表定义语句|视图定义语句|授权语句|撤销授权语句|禁止授权语句}

注意:

①AUTHORIZATION指定数据库级别的主体(数据库用户,数据库角色,应用程序角色)作为架构拥有者,在架构内创建的对象由架构所有者拥有。架构所包含对象的所有权可转让给任何数据库级别的主体,但架构所有者始终保留对此架构内对象的CONTROL权限,若CREATE SCHEMA中未指定所有者,则由当前用户作为所有者。

②当前支持不指定架构名称的 CREATE SCHEMA 语句,目的是为了向后兼容。此类语句并不在数据库中实际创建架构,但它们会创建表和视图,并授予权限。主体不需要 CREATE SCHEMA 权限来执行这一早期形式的 CREATE SCHEMA,因为不会创建任何架构。在 SQL Server 的未来版本中将删除此功能。

③授权语句GRANT指定可对除新架构外的任何安全对象授予权限的 GRANT 语句。

   撤销授权语句REVOKE指定可对除新架构外的任何安全对象撤消权限的 REVOKE 语句。

   禁止授权语句DENY指定可对除新架构外的任何安全对象拒绝授予权限的 DENY 语句。

④CREATE SCHEMA 可以在单条语句中创建架构以及该架构所包含的表和视图,并授予对任何安全对象的 GRANT、REVOKE 或 DENY 权限。此语句必须作为一个单独的批处理执行。CREATE SCHEMA 语句所创建的对象将在要创建的架构内进行创建。

⑤GRANT 语句可以在创建某个对象自身之前对该对象授予权限,CREATE VIEW 语句也可以出现在创建该视图所引用表的 CREATE TABLE 语句之前。同样,CREATE TABLE 语句可以在 CREATE SCHEMA 语句定义表之前声明表的外键。

⑥支持在 CREATE SCHEMA 语句中使用 DENY 和 REVOKE。DENY 和 REVOKE 子句将按照它们在 CREATE SCHEMA 语句中出现的顺序执行。

⑦若要指定其他用户作为所创建架构的所有者,则调用方必须具有对该用户的 IMPERSONATE 权限。如果指定一个数据库角色作为所有者,则调用方必须拥有该角色的成员身份或对该角色拥有 ALTER 权限。

例如:

下面的示例将创建由 Annik 拥有的、包含表 NineProngsSprockets 架构。该语句向 Mandar 授予 SELECT 权限,而对 Prasanna 拒绝授予 SELECT 权限。请注意,SprocketsNineProngs 在一个语句中创建。

        CREATE SCHEMA Sprockets AUTHORIZATION Annik
        CREATE TABLE NineProngs (source int, cost int, partnumber int)
        GRANT SELECT ON SCHEMA::Sprockets TO Mandar
        DENY SELECT ON SCHEMA::Sprockets TO Prasanna;

 

二、ALTER SCHEMA---------------------修改架构

ALTER SCHEMA 目标架构名 TRANSFER 原架构名.对象名

说明:修改架构即将架构中的对象转移到其他架构中,修改架构不会改变架构中的对象,但与该对象相关联的所有权限都被删除

如:ALTER SCHEMA S_YX TRANSFER DBO.T1

 

三、DROP SCHEMA------------------------删除架构

DROP SCHEMA 架构名

注意:只有当架构中不在包含对象时,才可以删除该架构。

四、ALTER AUTHORIZATION------------修改架构所有者

ALTER AUTHORIZATON ON [<实体类型>::] 实体名 TO {schema owner|主体名}

对象类型::={SCHEMA|ROLE|DATABASE...........}

ALTER AUTHORIZATION 不进可以修改架构所有者,也可以修改其他类型所有者

如:ALTER AUTHORIZATION ON SCHEMA::S_TY  TO DBO

 

 

 

 

 

 

 

 

 

 

 

posted @ 2013-01-31 13:45  伴夏  阅读(1339)  评论(0编辑  收藏  举报